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

+ Recent posts