일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 캡슐화
- 안드로이드 앱 개발
- 산책하기 좋은 곳
- 졸업 작품 소재
- 파이썬
- 표준 입출력
- c#
- 언제나 휴일
- 충남 천안
- 독립기념관
- 알고리즘
- 네트워크 프로그래밍
- 클래스 다이어그램
- 유튜브 동영상 강의
- 실습으로 다지는 c#
- 추천
- 소켓 통신
- c언어
- Windows Forms
- 강의
- 실습
- 소스 코드
- 동영상
- 표준 라이브러리 함수
- 프로젝트
- 원격 제어 프로그램
- 무료 동영상 강의
- 동영상 강의
- 언제나휴일
- C++
Archives
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
다형성 실습 – 오케스트라, 음악가, 피아니스트, 드러머 [C++] 본문
안녕하세요. 언제나 휴일에 언휴예요.
이번에는 다형성 실습이예요.
다형성은 하나의 이름으로 보여도 실제 형태는 다양할 수 있는 성질입니다.
기반 형식 포인터 변수로 파생 형식 개체를 사용할 수 있는 특징을 형식의 다형성이라고 부릅니다.
기반 형식의 가상 메서드를 파생 형식에서 재정의할 수 있습니다.
이 때 기반 형식 포인터 변수로 해당 메서드를 호출하면 실제 개체 형식에 정의한 메서드가 동작합니다.
이러한 특징을 메서드의 다형성이라고 부릅니다.
이러한 다형성에 관한 실습을 오케스트라(음악가, 피아니스트, 드러머) 소재로 진행합니다.
/* https://ehpub.co.kr
C++ 예제 - 언제나 휴일
다형성 실습
*/
#include
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++ 예제 및 소스' 카테고리의 다른 글
[C언어 소스] 문자열 길이를 계산하는 함수 만들기 (0) | 2025.01.08 |
---|---|
Queue를 이용한 스케쥴러 시뮬레이션 [C++] (0) | 2025.01.08 |
파서 트리를 이용한 계산기 [C++] (0) | 2025.01.08 |
함수 개체, 회원 및 회원 컬렉션 구현[C++] (0) | 2025.01.08 |
개체 출력자 실습 – 회원 클래스 및 쉬프트 연산자 중복 정의 [C++] (0) | 2025.01.08 |
상품과 할인 상품 – 상속 실습 [C++] (0) | 2025.01.08 |
회원 클래스 정의 – 정적 멤버 캡슐화 [C++] (0) | 2025.01.08 |
복소수 클래스 정의 – 캡슐화 실습 [C++] (0) | 2025.01.08 |