Time*는 Time이나 NewTime도 지시 가능
Time.h
#define TIME
#include <iostream>
using namespace std;
class Time {
private:
int hour;
int min;
public:
Time();
Time(int, int);
virtual void show();
int getHour() { return hour; };
int getMin() { return min; };
virtual ~Time(); // NewTime인 경우에도 작동하도록 virtual로 설정
};
class NewTime : public Time { // 기초 클래스 Time
private:
int day;
public:
NewTime();
NewTime(int, int, int);
void show();
};
#endif
함수 c++ 파일
#include "Time.h"
Time::Time() {
hour = min = 0;
}
Time::Time(int h, int m) {
hour = h;
min = m;
}
void Time::show() {
cout << hour << " : " << min << endl;
}
Time::~Time() {
}
NewTime::NewTime() : Time() { // Time 생성 후 NewTime에게 전달
day = 0;
}
NewTime::NewTime(int h, int m, int d) : Time(h, m) { // 파생 클래스가 먼저 h, m를 기초 클래스 h, m에 전달
day = d;
}
void NewTime::show() {
cout << getHour() << " : " << getMin() << endl;
cout << day << "일" << endl;
}
메인 c++ 파일
#include "Time.h"
const int MAX = 3;
int main() {
Time* t[MAX];
int hour;
int min;
int day;
for (int i = 0; i < MAX; i++) {
cout << "\n<" << i + 1 << "번째 원소 설정>" << endl;
cout << "시간 : ";
cin >> hour;
cout << "분 : ";
cin >> min;
int check;
cout << "일수를 입력하려면 1, 아니라면 0을 입력 : ";
cin >> check;
if (check == 0) t[i] = new Time(hour, min);
else if (check == 1) {
cout << "일 : ";
cin >> day;
t[i] = new NewTime(hour, min, day);
}
else cout << "잘못된 입력" << endl;
}
for (int i = 0; i < MAX; i++) {
cout << "\n<" << i + 1 << "번째 원소>" << endl;
t[i]->show(); // Time이냐 NewTime이냐에 따라 그에 맞게 동작
}
for (int i = 0; i < MAX; i++) delete t[i]; // 소멸자 호출
return 0;
}
출력
<1번째 원소 설정>
시간 : 1
분 : 1
일수를 입력하려면 1, 아니라면 0을 입력 : 1
일 : 1
<2번째 원소 설정>
시간 : 2
분 : 2
일수를 입력하려면 1, 아니라면 0을 입력 : 0
<3번째 원소 설정>
시간 : 3
분 : 3
일수를 입력하려면 1, 아니라면 0을 입력 : 1
일 : 3
<1번째 원소>
1 : 1
1일
<2번째 원소>
2 : 2
<3번째 원소>
3 : 3
3일
728x90
'c++ 기초' 카테고리의 다른 글
실제값과 출력값의 절대오차, 상대오차 (0) | 2025.01.16 |
---|---|
역슬래시( / ) 출력 (0) | 2025.01.10 |
26) 상속, 다형 상속 (0) | 2025.01.06 |
25) 출력 연산자(<<) 오버로딩 (0) | 2025.01.06 |
24) 연산자 오버로딩, friend (0) | 2025.01.05 |