윤성우의 열헐 C++
윤성우의 열혈 c++) Chapter 04. 클래스의 완성
tose33
2022. 3. 14. 21:59
문제 04-1 [정보은닉과 const]
#include <iostream>
using namespace std;
class FruitSeller
{
private:
int APPLE_PRICE;
int numOfApples;
int myMoney;
public:
void InitMembers(int price, int num, int money)
{
APPLE_PRICE = price;
numOfApples = num;
myMoney = money;
}
int SaleApples(int money)
{
if(money < 0)
{
cout << "0개 이상의 사과 구매만 가능합니다" << endl;
return 0;
}
int num = money / APPLE_PRICE;
numOfApples -= num;
myMoney += money;
return num;
}
void ShowSalesResult() const
{
cout << "남은 사과: " << numOfApples << endl;
cout << "판매 수익: " << myMoney << endl;
}
int GetApples() const
{
return numOfApples;
}
};
class FruitBuyer
{
private:
int myMoney;
int numOfApples;
public:
void InitMembers(int money)
{
myMoney = money;
numOfApples = 0;
}
void BuyApples(FruitSeller &seller, int money)
{
if(seller.GetApples() < 0)
{
cout << "0개 이상의 사과 구매만 가능합니다" << endl;
return;
}
numOfApples += seller.SaleApples(money);
myMoney -= money;
}
void ShowBuyResult() const
{
cout << "현재 잔액: " << myMoney << endl;
cout << "사과 개수: " << numOfApples << endl;
}
};
문제 04-2 [다양한 클래스의 정의]
#include <iostream>
using namespace std;
class Point
{
private:
int xpos, ypos;
public:
void Init(int x, int y)
{
xpos = x;
ypos = y;
}
void ShowPointInfo() const
{
cout << "[" << xpos << ", " << ypos << "]" << endl;
}
int GetX() const
{
return xpos;
}
int GetY() const
{
return ypos;
}
};
class Circle
{
private:
Point center;
int rad;
public:
void Init(int x, int y, int _rad)
{
center.Init(x, y);
rad = _rad;
}
void ShowCircleInfo() const
{
cout << "radius: " << rad << endl;
center.ShowPointInfo();
}
};
class Ring
{
private:
Circle innerCircle;
Circle outterCircle;
public:
void Init(int innerX, int innerY, int innerRad, int outterX, int outterY, int outterRad)
{
innerCircle.Init(innerX, innerY, innerRad);
outterCircle.Init(outterX, outterY, outterRad);
}
void ShowRingInfo()
{
cout << "Inner Circle Info..." << endl;
innerCircle.ShowCircleInfo();
cout << "Outter Circle Info..." << endl;
outterCircle.ShowCircleInfo();
}
};
int main()
{
Ring ring;
ring.Init(1, 1, 4, 2, 2, 9);
ring.ShowRingInfo();
}
문제 04-3 [C++ 기반의 데이터 입출력]
문제 1
#include <iostream>
using namespace std;
class Point
{
private:
int xpos, ypos;
public:
Point(int x, int y): xpos(x), ypos(y) {}
void ShowPointInfo() const
{
cout << "[" << xpos << ", " << ypos << "]" << endl;
}
int GetX() const
{
return xpos;
}
int GetY() const
{
return ypos;
}
};
class Circle
{
private:
Point center;
int rad;
public:
Circle(Point _center, int _rad)
: center(_center), rad(_rad) {}
void ShowCircleInfo() const
{
cout << "radius: " << rad << endl;
center.ShowPointInfo();
}
};
class Ring
{
private:
Circle innerCircle;
Circle outterCircle;
public:
Ring(int innerX, int innerY, int innerRad, int outterX, int outterY, int outterRad)
: innerCircle(Point(innerX, innerY), innerRad), outterCircle(Point(outterX, outterY), outterRad) {}
void ShowRingInfo()
{
cout << "Inner Circle Info..." << endl;
innerCircle.ShowCircleInfo();
cout << "Outter Circle Info..." << endl;
outterCircle.ShowCircleInfo();
}
};
int main()
{
Ring ring(1, 1, 4, 2, 2, 9);
ring.ShowRingInfo();
}
문제 2
#include <iostream>
#include <cstring>
using namespace std;
namespace COMP_POS
{
enum { CLERK, SENIOR, ASSIST, MANAGER };
void ShowRank(int _rank)
{
switch(_rank)
{
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 * phoneNumber;
int rank;
public:
NameCard(char * _name, char * _company, char * _phoneNumber, int _rank) : rank(_rank)
{
name = new char[strlen(_name)+1];
strcpy(name, _name);
company = new char[strlen(_company)+1];
strcpy(company, _company);
phoneNumber = new char[strlen(_phoneNumber)+1];
strcpy(phoneNumber, _phoneNumber);
}
void ShowNameCardInfo()
{
cout << "이름: " << name << endl;
cout << "회사: " << company << endl;
cout << "전화번호: " << phoneNumber << endl;
cout << "직급: "; COMP_POS::ShowRank(rank);
cout << endl;
}
~NameCard()
{
delete name;
delete company;
delete phoneNumber;
}
};
int main()
{
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();
}