본문 바로가기
c++ 기초

27) 동적 결합

by BitsrimAcrux 2025. 1. 7.

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