我正尝试使用指向配偶(Person对象)和子对象(Person对象)的表来创建类Person。这个类实现婚姻(符+ =),离婚(例如法)和创建新的儿童(操作员++):指向同一类对象的指针的类
class Person{
private:
char* name;
int sex;
Person* spouse;
Person* children[5];
public:
Person();
Person(const Person&);
Person & operator =(const Person&);
Person & operator +=(Person&);//marriage
Person & operator ++();//new children
void divorce();//divorce
Person::~Person();
}
我created析其删除children每当有没有配偶:
Person::~Person(){
if (name !=NULL)
delete [] name;
name=NULL;
if (spouse!=NULL)
spouse->spouse =NULL;
else{
for (int i=0; i<5;i++){
if (children[i]!=NULL)
delete children[i];
children[i]=NULL;
}
}
}
我do不知道我的拷贝构造函数和操作符=是否应该创建另一个配偶和子女的实例。我试图做到这一点,但我是在无限的参考堆栈。是否可以使用正确分配的配偶和子女创建Person对象的副本?
感谢您的任何意见和建议 Elkhunter
完全偏离主题 - 但你知道*孩子*已经是孩子*的复数,所以*孩子*只是一个语法错误?此外,这个世界上有超过5个孩子的人,所以我建议将它放在'std :: vector'中。还解决了他们的删除问题。 –
为什么使用'name'而不是['std :: string'](http://en.cppreference.com/w/cpp/string/basic_string)的指针?另外,你正在初始化构造函数中的'childrens'和'spouse'成员?如果一个人有五个以上的孩子呢?可能使用例如而不是['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)? –
@NielsKeurentjes:我倾向于不太担心符号名称中的语法问题。考虑一个类'Person':如果你实例化两次,你有两个'Persons'。这在边缘情况下实际上是英文的,但你明白我的意思。如果你需要一个更好的例子,那么“析构函数”是什么?这就是说,他_did_在这里的意思是“孩子们”:) –