我正嘗試使用指向配偶(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_在這裏的意思是「孩子們」:) –