미누에요
[C++] 윤성우의 열혈 C++ 프로그래밍 Ch05-1 : 복사 생성자의 정의 문제풀이 본문
728x90
반응형
SMALL
문제
문제 04-3의 문제 2를 통해서 NameCard 클래스를 정의하였다. 그런데 이 클래스도 생성자 내에서 메모리 공간을 동적 할당하기 때문에 복사 생성자가 필요한 클래스이다. 이에 복사 생성자를 적절히 정의해보기 바라며, 복사 이후에 문제가 발생하지 않음을 다음 main 함수를 통해서 확인하기 바란다.
[main 함수의 예]
int main(void){
NameCard manClerk("Lee", "ABCEng","010-1111-2222",COMP_POS::CLERK);
NameCard copy1=manClerk;
NameCard manSENIOR("Hong","OrangeEng","010-3333-4444",COMP_POS::SENIOR);
NameCard copy2=manSENIOR;
copy1.ShowNameCardInfo();
copy2.ShowNameCardInfo();
return 0;
}
정답
#include <iostream>
#include <cstring>
using namespace std;
namespace COMP_POS
{
enum
{
CLERK,
SENIOR,
ASSIST,
MANAGER
};
void ShowPositionInfo(int pos)
{
switch (pos)
{
case CLERK:
cout << "사원" << endl;
break;
case SENIOR:
cout << "주임" << endl;
break;
case ASSIST:
cout << "대리" << endl;
break;
case MANAGER:
cout << "과장" << endl;
break;
}
}
}
class NameCard
{
private:
char *name;
char *company;
char *phone;
int position;
public:
NameCard(char *_name, char *_company, char *_phone, int pos) : position(pos)
{
name = new char[strlen(_name) + 1];
company = new char[strlen(_company) + 1];
phone = new char[strlen(_phone) + 1];
strcpy(name, _name);
strcpy(company, _company);
strcpy(phone, _phone);
}
NameCard(NameCard &namecard) : position(namecard.position)
{
name = new char[strlen(namecard.name) + 1];
company = new char[strlen(namecard.company) + 1];
phone = new char[strlen(namecard.phone) + 1];
strcpy(name, namecard.name);
strcpy(company, namecard.company);
strcpy(phone, namecard.phone);
}
void ShowNameCardInfo()
{
cout << "이름 : " << name << endl;
cout << "회사 : " << company << endl;
cout << "전화번호 : " << phone << endl;
cout << "직급 : ";
COMP_POS::ShowPositionInfo(position);
cout << endl;
}
~NameCard()
{
delete[] name;
delete[] company;
delete[] phone;
}
};
int main(void)
{
NameCard manClerk("Lee", "ABCEng", "010-1111-2222", COMP_POS::CLERK);
NameCard copy1 = manClerk;
NameCard manSENIOR("Hong", "OrangeEng", "010-3333-4444", COMP_POS::SENIOR);
NameCard copy2 = manSENIOR;
copy1.ShowNameCardInfo();
copy2.ShowNameCardInfo();
return 0;
}
결과
728x90
반응형
LIST
'C++' 카테고리의 다른 글
[C++] 생성자(Constructor) (0) | 2024.03.17 |
---|---|
[C++] 멤버 이니셜라이저(Member Initializer) (0) | 2024.03.17 |
[C++] new , delete (0) | 2024.03.10 |
[C++] const 참조자, const 참조자를 사용한 Call-by-reference (0) | 2024.03.10 |
[C++] 참조자를 이용하여 함수 만들기, Call by reference with reference (0) | 2024.03.10 |