반응형
/* https://ehpub.co.kr
C++ 예제 - 언제나 휴일
다형성 실습
*/
#include <iostream>
using namespace std;
class Musician
{
const int mnum;
public:
Musician(int mnum) :mnum(mnum)
{
}
void Greeting()
{
cout << mnum << " 인사합니다." << endl;
}
virtual void Play() = 0;//추상 메서드(순수 가상 메서드)
int GetMNum()const
{
return mnum;
}
};
class Pianist :
public Musician
{
public:
Pianist(int mnum) :Musician(mnum)
{
}
virtual void Play()
{
cout << GetMNum() << " 딩동 댕동~" << endl;
}
};
class Drummer :
public Musician
{
public:
Drummer(int mnum) :Musician(mnum)
{
}
virtual void Play()
{
cout << GetMNum() << " 두두둥" << endl;
}
};
class Orchestra
{
Musician** members;
const int max_member;
int now_members;
public:
Orchestra(int max_member) :max_member(max_member)
{
Initialize();
}
~Orchestra()
{
delete[] members;
}
bool JoinMember(Musician* mu)
{
if (now_members == max_member)
{
return false;
}
members[now_members] = mu;
now_members++;
return true;
}
void Greeting()const
{
cout << "저희 단원을 소개합니다. 멤버는 총 " << now_members << "명 입니다." << endl;
for (int i = 0; i < now_members; i++)
{
members[i]->Greeting();
}
}
void StartConcert()
{
for (int i = 0; i < now_members; i++)
{
members[i]->Play();//메서드의 다형성
}
}
private:
void Initialize()
{
members = new Musician * [max_member];
now_members = 0;
}
};
int main()
{
Orchestra* orchestra = new Orchestra(50);
Pianist* pianist = new Pianist(1);
Drummer* drummer = new Drummer(2);
orchestra->JoinMember(pianist);//형식의 다형성
orchestra->JoinMember(drummer);//형식의 다형성
orchestra->Greeting();
orchestra->StartConcert();
delete orchestra;
delete drummer;
delete pianist;
return 0;
}
실행 결과
저희 단원을 소개합니다. 멤버는 총 2명 입니다.
1 인사합니다.
2 인사합니다.
1 딩동 댕동~
2 두두둥
반응형
'C++ > C++ 예제' 카테고리의 다른 글
함수 개체, 회원 및 회원 컬렉션 구현[C++] (0) | 2020.07.24 |
---|---|
개체 출력자 실습 – 회원 클래스 및 쉬프트 연산자 중복 정의 [C++] (0) | 2020.07.22 |
상품과 할인 상품 – 상속 실습 [C++] (0) | 2020.07.17 |
회원 클래스 정의 – 정적 멤버 캡슐화 [C++] (0) | 2020.07.15 |
복소수 클래스 정의 – 캡슐화 실습 [C++] (0) | 2020.07.14 |