[연습문제 5-1]
문제1) 연습문제 4-1의 3번 문제를 통해서 NameCard 클래스를 정의하였다. 이 클래스도 생성자 내에서 메모리 공간을 동적 할당하고 있으며 소멸자에서 이를 해제하고 있기 때문에 깊은 복사를 하는 복사 생성자가 필요한 상황이다. 이에 적절한 복사 생성자를 정의해 보기 바란다. 그리고 제대로 정의를 하였는지, 다음 main 함수를 통해서 확인하기 바란다.
int main(void) { NameCard Lee("Lee Hun", "333-3333", "freelec", "manager"); NameCard Lee2(Lee); Lee.ShowData(); return 0; } 구루마루의 답안 보기
#include <iostream>
using namespace std;
class NameCard
{
char *m_Name;
char *m_Phone;
char *m_Address;
char *m_Pos;
public :
NameCard(char *strName, char *strPhone, char *strAddress, char *strPos)
{
m_Name = new char [strlen(strName)+1];
strcpy_s(m_Name, strlen(strName)+1, strName);
m_Phone = new char [strlen(strPhone)+1];
strcpy_s(m_Phone, strlen(strPhone)+1, strPhone);
m_Address = new char [strlen(strAddress)+1];
strcpy_s(m_Address,strlen(strAddress)+1, strAddress);
m_Pos = new char [strlen(strPos)+1];
strcpy_s(m_Pos, strlen(strPos)+1, strPos);
};
NameCard(const NameCard &NewCard)
{
m_Name = new char [strlen(NewCard.m_Name)+1];
strcpy_s(m_Name, strlen(NewCard.m_Name)+1, NewCard.m_Name);
m_Phone = new char [strlen(NewCard.m_Phone)+1];
strcpy_s(m_Phone, strlen(NewCard.m_Phone)+1, NewCard.m_Phone);
m_Address = new char [strlen(NewCard.m_Address)+1];
strcpy_s(m_Address,strlen(NewCard.m_Address)+1, NewCard.m_Address);
m_Pos = new char [strlen(NewCard.m_Pos)+1];
strcpy_s(m_Pos, strlen(NewCard.m_Pos)+1, NewCard.m_Pos);
};
~NameCard()
{
if (m_Address != NULL)
{
delete []m_Address;
m_Address = NULL;
}
if (m_Phone != NULL)
{
delete []m_Phone;
m_Phone = NULL;
}
if (m_Pos != NULL)
{
delete []m_Pos;
m_Pos = NULL;
}
if (m_Name != NULL)
{
delete []m_Name;
m_Name = NULL;
}
};
void ShowData()
{
cout << "이 름: " <<m_Name<<endl;
cout << "전화번호: " <<m_Phone<<endl;
cout << "주 소: " <<m_Address<<endl;
cout << "직 급: " <<m_Pos<<endl;
};
};
크리에이티브 커먼즈 라이선스