배우자 (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();
}
내가 어떤 배우자가없는 때마다 아이들을 삭제 소멸자 생성 :
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;
}
}
}
그렇게하지를 내 사본 생성자 및 운영자가 배우자 및 자녀의 다른 인스턴스를 생성해야하는지 확인하십시오. 나는 이것을하려고했지만 무한한 참조에 쌓여 있었다. 배우자와 자녀가 적절히 배정 된 Person 객체의 복사본을 만들 수 있습니까? 의견과 제안에 미리
덕분에 Elkhunter
완전히 알고 싶습니다. * 자녀 *는 이미 * 자녀 *입니다. * 아이들 *은 문법적 오류 일뿐입니다. 또한이 세상에 5 명 이상의 아이들이있는 사람들이 있기 때문에 대신'std :: vector'에 넣는 것이 좋습니다. 또한 삭제 문제를 해결합니다. –
왜''std :: string'이 아닌'name'을위한 포인터를 사용합니까 (http://en.cppreference.com/w/cpp/string/basic_string)? 또한 생성자에서 'childrens'및 '배우자'멤버를 제대로 초기화하고 있습니까? 사람이 다섯 명이 넘으면 어떻게 될까요? 아마도 예를 들어. ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) 대신에? –
@NielsKeurentjes : 저는 심볼 이름에서 문법에 대해 너무 걱정하지 않는 경향이 있습니다. 'Person' 클래스를 생각해보십시오. 두 번 인스턴스화하면 두 개의 Person이 생깁니다. 이것은 사실상 영어의 경우에 유효합니다. 그러나 여러분은 제가 의미하는 바를 봅니다. 더 좋은 예가 필요한 경우, 도대체 "소멸자"는 무엇입니까? 즉, 그는 "아이들"이라는 뜻입니다. :) –