일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Windows Forms
- 표준 라이브러리 함수
- 네트워크 프로그래밍
- 안드로이드 앱 개발
- c언어
- 동영상
- 소스 코드
- 실습
- 충남 천안
- 클래스 다이어그램
- 캡슐화
- 추천
- c#
- 소켓 통신
- 동영상 강의
- 알고리즘
- 산책하기 좋은 곳
- 졸업 작품
- 언제나휴일
- 유튜브 동영상 강의
- 강의
- 원격 제어 프로그램
- 파이썬
- 언제나 휴일
- 프로젝트
- C++
- 표준 입출력
- 실습으로 다지는 c#
- 무료 동영상 강의
- 졸업 작품 소재
Archives
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
[C++] 43. 상속과 다형성 최종 실습 – 파생 클래스 본문
이제 파생 형식인 학사 학생, 운동학생, 마법학생과 진입점 main 부분을 구현합시다.
먼저 학사 학생 클래스에 필요한 멤버들을 고민해 보기로 해요.
class SStudent :
public Student
{
학사 학생은 더미 뇌가 멤버 필드로 필요합니다.
int dummy;
그리고 더미 뇌는 공부한 횟수가 5이 배수일 때마다 1씩 증가해야 하므로 공부한 횟수도 기억해야죠.
int total_scnt;
public:
SStudent(string name);
“공부하다.”, “강의받다.”, “잠자다.”, “휴식하다.”, “음료마시다.”, “노래하다.” 메서드를 재정의해야겠죠.
virtual void Study();
virtual void ListenLecture();
virtual void Sleep();
virtual void Relax();
virtual void Drink();
virtual void Sing();
그리고 정보 출력 메서드도 재정의합시다.
virtual void View()const;
학사 학생은 “독서하다.” 기능이 추가로 있습니다.
void Reading();
};
생성자에서는 더미 뇌를 0으로 초기화하고 공부한 횟수를 0으로 초기화하세요.
SStudent::SStudent(string name):Student(name)
{
dummy = 0;//더미 뇌는 생성 시 0
total_scnt = 0;
}
“공부하다.” 에서는 시나리오에 나와있는 것처럼 멤버 필드 값을 변경합니다.
void SStudent::Study()
{
SetHP(GetHP()-5);//체력 5소모
SetIQ(GetIQ()+GetSCnt()+dummy);//지력: scnt+더미 뇌 증가
SetStress(GetStress()-2);//스트레스: 2감소
SetSCnt(GetSCnt()+1);
total_scnt++;
if(total_scnt%5 == 0)//더미 뇌는 공부한 회수가 5의 배수가 될 때마다 1씩 증가
{
dummy++;
}
}
“강의받다.”, “잠자다.”, “휴식하다.”, “음료마시다.”, “노래하다.” 메서드도 같은 방법으로 구현하세요.
정보 보기 기능에서는 학사 학생임을 출력하고 기반 형식에 무효화한 View 메서드를 호출하여 공통적인 부분을 출력합니다. 그리고 학사 학생에 있는 더미 뇌와 연속으로 공부한 횟수를 출력하세요.
void SStudent::View()const
{
cout<<"학사 학생";
Student::View();
cout<<" 더미 뇌:"<<dummy<<"연속으로 공부한 횟수:"<<total_scnt<<endl;
}
“독서하다.” 기능도 시나리오를 보고 멤버 필드 값을 변경하세요.
void SStudent::Reading()
{
dummy++;//더미 뇌 1증가
SetStress(GetStress()-5);//스트레스: 5감소
}
마법 학생과 운동학생도 같은 방법으로 구현하세요.
이제 진입점 main 함수를 구현해 보기로 해요.
먼저 학사 학생, 운동 학생, 마법 학생을 한 명씩 생성하세요.
Student *stues[3];
stues[0] = new SStudent("공부 좋아");
stues[1] = new PStudent("운동 잘해");
stues[2] = new MStudent("빠쥬따꾸");
cout<<"강의"<<endl;
for(int i = 0; i<3; i++)
{
전체 학생이 강의를 받게하고 정보를 출력하세요.
stues[i]->ListenLecture();
cout<<stues[i]<<endl;
}
cout<<"자습"<<endl;
for(int i = 0; i<3; i++)
{
자습에서는 전체 학생을 공부하게 합니다.
stues[i]->ListenLecture();
만약 학사 학생일 때는 독서도 하므로 dynamic_cast로 형 변환하여 확인하는 부분이 필요하겠죠.
SStudent *ss = dynamic_cast<SStudent *>(stues[i]);
if(ss)
{
ss->Reading();
}
cout<<stues[i]<<endl;
}
다른 기능들도 같은 방법으로 구현하세요.
'C & C++ > 디딤돌 C++' 카테고리의 다른 글
[C++] 47. 클래스에 연산자 중복 정의 (0) | 2024.04.09 |
---|---|
[C++] 46. 전역 연산자 중복 정의 (0) | 2024.04.09 |
[ C++] 45. 연산자 중복 정의 개요 (0) | 2024.04.09 |
[ C++] 44. 상속과 다형성 최종 실습 – 코드 (0) | 2024.04.08 |
[C++] 42. 상속과 다형성 최종 실습 – 학생 (0) | 2024.04.08 |
[C++] 41. 상속과 다형성 최종 실습 시나리오 (0) | 2024.04.08 |
[C++] 40. 상속과 다형성 실습2 (도형) (0) | 2024.04.08 |
[C++] 39. 상속, 다형성 실습1 (상품, 할인 상품) (0) | 2024.04.08 |