[1번 문제]
/*
앞서 제시한 문제 4-2를 해결하였는가? 당시만 해도 생성자를 설명하지 않은 상황이기 때문에 별도의 초기화
함수를 정의 및 호출해서 Point, Circle, Ring 클래스의 객체를 초기화 하였다.
이 때 구현한 답에 대해서 모든 클래스에 생성자를 정의해보자
*/
#include <iostream>
using namespace std;
class Point
{
private:
int xpos;
int ypos;
public:
/*
void Init(int x, int y)
{
xpos = x;
ypos = y;
}
*/
Point(int x, int y) :xpos(x), ypos(y)
{
}
int GetX()
{
return xpos;
}
int GetY()
{
return ypos;
}
void ShowPointInfo() const
{
cout << "[" << xpos << ", " << ypos << "]" << endl;
}
};
class Circle
{
private:
Point pos;
int radius;
public:
/*
void Init(int x, int y, int r)
{
pos.Init(x, y);
radius = r;
}
*/
Circle(int x, int y, int r):pos(x, y)
{
radius = r;
}
int GetX()
{
return pos.GetX();
}
int GetY()
{
return pos.GetY();
}
int GetR()
{
return radius;
}
};
class Ring
{
private:
Circle c1;
Circle c2;
public:
/*
void Init(int x1, int y1, int r1, int x2, int y2, int r2)
{
c1.Init(x1, y1, r1);
c2.Init(x2, y2, r2);
}
*/
Ring(int x1, int y1, int r1, int x2, int y2, int r2) :c1(x1, y1, r1), c2(x2, y2, r2)
{
}
void ShowRingInfo()
{
cout << "Inner Circle Info...." << endl << "radius:" << c1.GetR() << endl;
cout << "[" << c1.GetX() << ", " << c1.GetY() << "]" << endl;
cout << "Outter Circle Info...." << endl << "radius:" << c2.GetR() << endl;
cout << "[" << c2.GetX() << ", " << c2.GetY() << "]" << endl;
}
};
int main(void)
{
Ring ring(1, 1, 4, 2, 2, 9);
//ring.Init(1, 1, 4, 2, 2, 9);
ring.ShowRingInfo();
return 0;
}
[2번 문제]
/*
명함을 의미하는 NameCard 클래스를 정의해보자. 이 클래스에는 다음의 정보가 저장되어야 한다.
1.성명
2.회사이름
3.전화번호
4.직급
단, 직급 정보를 제외한 나머지는 문자열의 형태로 저장을 하되, 길이에 딱 맞는 메모리 공간을 할당 받는 형태로 정의하자
그리고 직급 정보는 int형 멤버변수를 선언해서 저장을 하되, 아래의 enum 선언을 활용해야 한다
enum{CLERK, SENIOR, ASSIST, MANAGER};
위의 enum 선언에서 정의된 상수는 순서대로 사원, 주임, 대리, 과장을 뜻한다.
그럼 다음 main 함수와 실행의 예를 참조하여, 이 문제에서 원하는 형태대로 NameCard 클래스를 완성해보자
int main(void)
{
NameCard manClerk("Lee", "ABCEng", "010-1111-2222", COMP_POS::CLERK);
NameCard manSENIOR("Hong", "OrangeEng", "010-3333-4444", COMP_POS::SENIOR);
NameCard manAssist("Kim", "SoGoodComp", "010-5555-6666", COMP_POS::ASSIST);
manClerk.ShowNameCardInfo();
manSENIOR.ShowNameCardInfo();
manAssist.ShowNameCardInfo();
return 0;
}
*/
#include <iostream>
#include <cstring>
using namespace std;
namespace COMP_POS
{
enum
{
CLERK, SENIOR, ASSIST, MANAGER
};
void ShowStatusInfo(int status)
{
switch (status)
{
case CLERK:
cout << "사원" << endl;
break;
case SENIOR:
cout << "주임" << endl;
break;
case ASSIST:
cout << "대리" << endl;
break;
case MANAGER:
cout << "과장" << endl;
}
}
}
class NameCard
{
private:
char *Name;
char *Company;
char *Phone;
int Status;
public:
NameCard(char *name, char *company, char *phone, int status) :Status(status) //생성자
{
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);
}
void ShowNameCardInfo()
{
cout << "이름: " << Name << endl;
cout << "회사: " << Company << endl;
cout << "전화번호: " << Phone << endl;
cout << "직급: ";
COMP_POS::ShowStatusInfo(Status);
cout << endl;
}
~NameCard() //소멸자
{
delete []Name;
delete []Company;
delete []Phone;
}
};
int main(void)
{
NameCard manClerk("Lee", "ABCEng", "010-1111-2222", COMP_POS::CLERK);
NameCard manSENIOR("Hong", "OrangeEng", "010-3333-4444", COMP_POS::SENIOR);
NameCard manAssist("Kim", "SoGoodComp", "010-5555-6666", COMP_POS::ASSIST);
manClerk.ShowNameCardInfo();
manSENIOR.ShowNameCardInfo();
manAssist.ShowNameCardInfo();
return 0;
}
개발 환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 열혈 C++ 프로그래밍 윤성우 저
'C++ > 열혈 C++ 프로그래밍(윤성우 저)' 카테고리의 다른 글
열혈 C++ 프로그래밍 5-1 문제 (0) | 2017.05.31 |
---|---|
OOP 단계별 프로젝트 2 (0) | 2017.05.30 |
열혈 C++ 프로그래밍 4-2 문제 (0) | 2017.05.30 |
열혈 C++ 프로그래밍 4-1 문제 (0) | 2017.05.30 |
열혈 C++ 프로그래밍 3-2 문제 (0) | 2017.05.29 |