728x90
- 기초 클래스 (오리지널 원본)
- 파생 클래스
1. 파생 클래스형의 객체 안에는 기초 클래스형의 데이터 멤버들이 저장됨
2. 파생 클래스형의 객체는 기초 클래스형의 메서드를 사용할 수 있음
3. 단, 기초 클래스형의 private member에는 접근할 수 없음 → 멤버 초기자 리스트를 통해 접근할 수 있게 됨
4. 파생 클래스는 자기 자신의 생성자를 필요로함
5. 파생 클래스는 부가적인 데이터 멤버들과 멤버 함수를 임의로 추가할 수 있음
**아래 주석코드의 설명 잘 읽기,,
time.h
#include<iostream>
using namespace std;
#ifndef FIRE_C_TIME_H
#define FIRE_C_TIME_H
class Time{
private:
int hours;
int mins;
public:
Time();
Time(int, int);
void show();
~Time();
};
/*클래스 상속*/
//파생 클래스: 오리지널 클래스인 Time을 상속받음
class NewTime : public Time {
private:
int day;
public:
NewTime(); //생성자
NewTime(int, int, int); //생성자
void print();
};
#endif //FIRE_C_TIME_H
time_func.cpp
#include "time.h"
Time::Time(){
hours = 0;
mins = 0;}
Time::Time(int h, int m){
hours = h;
mins = m;}
void Time::show(){
cout << hours << "시간 " << mins << "분" << endl;}
Time::~Time(){}
// " : Time()" 부분은 '멤버 초기자 리스트'
// 기초형 클래스의 private member에 접근할 수 있게 됨
NewTime::NewTime() : Time(){
//Time()이 먼저 생성된 뒤 해당 내용이 NewTime에 전달되어, hours = mins = 0으로 초기화됨
//NewTime()에서는 day만 초기화해주면 됨
day = 0;
}
NewTime::NewTime(int h, int m, int d) : Time(h, m) {
//Time(h,m)이 생성된 뒤 NewTime의 h, m에 전달해줌
//d만 따로 정의해주면 됨
day = d;
}
void NewTime::print(){
cout << day << "일 " << endl;
show();
// hours와 mins는 NewTime의 멤버변수가 아니므로 직접 접근하지는 못함
// 따라서 기초형 클래스의 함수 통해 출력함
}
main.cpp
#include "time.h"
#include "time_func.cpp"
int main(){
NewTime temp1();
NewTime temp2(3, 30, 2);
temp2.print();
return 0;}
/*2일
3시간 30분*/
728x90
'개발 > c++' 카테고리의 다른 글
[c++] 동적 결합 (0) | 2023.09.11 |
---|---|
[c++] virtual 통한 가상 메서드 선언, public 함수 다형 상속 (0) | 2023.09.10 |
[c++] friend (feat. 연산자 오버로딩 응용) (0) | 2023.09.10 |
[c++] 연산자 오버로딩 (0) | 2023.09.10 |
[c++] this 포인터, 클래스 객체 배열 (0) | 2023.09.08 |