如果标题错误,我很抱歉,我不知道如何命名。
我有一个名字:
class Name {
char * name;
public:
Name(const char * n){
name = new char[strlen(n)+1];
strcpy(name,n);
}
Name& operator=(const Name& n){
name = new char[strlen(n.name)+1];
strcpy(name, n.name);
return *this;
}
Name(const Name& n){
*this = n;
}
};
另一个类应该有Name对象的Person作为它的成员。我怎样才能做到这一点?我在想这样的事情:
class Person{
double height;
Name name;
public:
Person(double h, const Name& n){
height = h;
name = n;
}
};
但只有这似乎有效:
class Person{
double height;
Name * name;
public:
Person(double h, const Name & n){
height = h;
name = new Name(n);
}
};
这是正确的方法,为什么我不能像我想的那样做到这一点?感谢
答案 0 :(得分:2)
使构造函数如下:
Person(double h, const Name& n)
: height(h), name(n)
{}
然后阅读您最喜欢的C ++教科书中的构造函数初始化列表。
原始代码不起作用的原因是Name
没有默认构造函数(可以不带参数调用的构造函数)。
答案 1 :(得分:1)
您的Name
类型没有默认构造函数,因此您必须在Person
的初始值设定项列表中对其进行初始化。除此之外,你的operator=
泄漏内存并且对于自我分配是不安全的,你永远不会在析构函数中释放内存,所以那里还有另一个泄漏。
是否有充分的理由不使用std::string
代替您的Name
类型?