C++:动态内存分配+向量
C++: Dynamic memory allocation + vector
当我尝试将人员添加到向量时,它不起作用+我不能添加多个人员。我对C++还很陌生,我想不通。对不起我的英语:(谢谢你的帮助/提示。我一直在搜索它,尝试了很多事情,但无论如何都无法使它工作。我做错了什么,或者可能这个代码一团糟?
class Osoba
{
public:
char *name, *surname, *phone;
Osoba();
Osoba(const char *name, const char *surname, const char *phone);
~Osoba();
};
inline Osoba::Osoba(){};
inline Osoba::Osoba(const char *name, const char *surname, const char *phone)
{
Osoba::name = new char[strlen(name) + 10];
strcpy(Osoba::name, name);
Osoba::surname = new char[strlen(surname) + 1];
strcpy(Osoba::surname, surname);
Osoba::phone = new char[strlen(phone) + 1];
strcpy(Osoba::phone, phone);
}
inline Osoba::~Osoba()
{
delete name;
delete surname;
delete phone;
}
int main()
{
const char *name2, *surname2, *phone2;
vector <Osoba> osoba;
cout << "n1.-Workers listn2.-Add personn3.-Quit";
char odp;
do
{
odp = getch();
switch (odp)
{
case '1':
cout << "nnnList:n";
for (int i = 0; i < osoba.size(); i++)
{
cout << endl;
cout << "Name: " << osoba[i].name << endl;
cout << "Surname: " << osoba[i].surname << endl;
cout << "Phone: " << osoba[i].phone << endl;
}
break;
case '2':
cout << "nnADD PERSON";
cout << "nName: ";
string name;
cin >> name;
name2 = name.c_str();
cout << "Surname: ";
string surname;
cin >> surname;
surname2 = surname.c_str();
cout << "Phone: ";
string phone;
cin >> phone;
phone2 = phone.c_str();
osoba.push_back(Osoba(name2, surname2, phone2));
break;
}
} while (odp != '3');
return 0;
}
既然你在做C++,为什么不用C++方式呢
#include <string>
using std::string;
class Osoba
{
public:
Osoba() = default;
Osoba(const string& name, const string& surname, const string& phone);
Osoba(const Osoba&) = default;
Osoba& operator=(const Osoba&) = default;
~Osoba() = default;
const string& Name() const { return name; }
const string& Surname() const { return surname; }
const string& Phone() const { return phone; }
void Name(const string& n) { name =n; }
void Surname(const string& s) { surname =s; }
void Phone(const string& p) { phone =p; }
private:
string name, surname, phone;
};
Osoba::Osoba(const string& name, const string& surname, const string& phone)
: name(name), surname(surname), phone(phone)
{
}
有几个问题:
定义复制构造函数如下:
Osoba::Osoba(const Osoba& src) {
if (src.name != NULL) {
name = new char[strlen(src.name) + 1];
strcpy(name, src.name);
}
if (src.surname != NULL) {
surname = new char[strlen(src.surname ) + 1];
strcpy(surname , src.surname );
}
if (src.phone != NULL) {
phone = new char[strlen(src.phone) + 1];
strcpy(phone, src.phone);
}
}
更改构造函数如下:
Osoba::Osoba(){
name = (char *) NULL;
surname = (char *) NULL;;
phone = (char *) NULL;
}
};
Osoba::Osoba(const char *name, const char *surname, const char *phone)
{
if (name != NULL) {
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
}
if (surname != NULL) {
this->surname = new char[strlen(surname ) + 1];
strcpy(this->surname , surname );
}
if (phone != NULL) {
this->phone = new char[strlen(phone) + 1];
strcpy(this->phone, phone);
}
}
此外,分配操作员:
Osoba& Osoba::operatoe = (const Osoba& src) {
if (this == &src)
return *this;
if (src.name != NULL) {
name = new char[strlen(src.name) + 1];
strcpy(name, src.name);
}
if (src.surname != NULL) {
surname = new char[strlen(src.surname ) + 1];
strcpy(surname , src.surname );
}
if (src.phone != NULL) {
phone = new char[strlen(src.phone) + 1];
strcpy(phone, src.phone);
}
return *this;
}
相关文章:
- 用字符串的向量分配字符串向量
- 如何将向量分配给参考变量?
- 如何将C++向量分配给非表全局变量
- 向量分配上的 C++ 分割错误
- 如何将int分解为数字并以相同的顺序为向量分配数字
- 将向量分配给一个元素
- 将向量分配给向量向量的向量时,向量是范围的
- 带有Valgrind的C 的向量分配中的内存泄漏
- 将向量分配给另一个
- 为向量分配内存
- 为结构的整个向量分配结构的元素
- 将向量分配给结构的向量字段
- C++对象的向量:分配对象
- C++:通过从映射向量分配映射实例来填充映射的映射
- 将儿童的向量分配给祖父母的向量
- 使用 std::向量分配的类比 LOT 的指针分配慢
- C++ 向量分配问题
- 为什么向量分配会改变分配的向量
- 在C++中初始化向量时,你能给向量分配一个大的内存块吗
- 向量分配中的问题