상속(Inheritance) 기본, 파생 클래스
상속(Inheritance)?
① 기존의 클래스에 새로운 기능을 추가할 수 있다
② 클래스가 나타내고 있는 데이터에 다른 것을 더 추가할 수 있다
③ 클래스 메서드가 동작하는 방식을 변경할 수 있다
[time.h]
#include <iostream>
#ifndef TIMEH
#define TIMEH
class Time //기초 클래스
{
private:
int hours;
int mins;
public:
Time();
Time(int, int);
void addHours(int);
void addMins(int);
Time sum(Time&); //Time 클래스를 return하는 함수 sum의 원형 제공
void show();
~Time();
};
#endif
위 헤더파일에 상속을 활용하여 NewTime이라는 *파생클래스를 추가한 후, Time 멤버에 day를 추가해보자!
※ 파생 클래스란?
① 파생 클래스형의 객체 안에는 기초 클래스형의 데이터 멤버들이 저장된다
② 파생 클래스형의 객체는 기초 클래스형의 메서드들을 사용할 수 있다
③ 파생 클래스는 자기 자신의 생성자를 필요로 한다
④ 파생 클래스는 부가적인 데이터 멤버들과 멤버 함수들을 임의로 추가할 수 있다
헤더파일에 NewTime 파생클래스 추가하기
class NewTime : public Time { //파생 클래스 (상속)
private:
int day;//NewTime 파생클래스:+day
public:
NewTime();//default 생성자
NewTime(int, int, int);//Time 클래스 생성자에 멤버 day 추가
void print();//NewTime 출력함수 print()
};
[func.cpp]에 NewTime 파생클래스의 생성자에 대한 정의 추가하기 (기존 Time 클래스 활용)
NewTime::NewTime() : Time() {//멤버 초기자 리스트 문법
//hours = mins = 0; 이라는 Time 클래스의 default 생성자를 직접적으로 포함시킴
day = 0;//추가되는 멤버 day에 대한 default값만을 초기화
}
NewTime::NewTime(int h, int m, int d) : Time(h,m) {
day = d;
}
void NewTime::print() {//NewTime 클래스의 출력함수는 별도로 정의
cout << "일 : " << day << endl;
show();//파생클래스에 Time클래스의 출력함수를 직접적으로 포함시킬 수 있다
}
main 코드 작성하기
int main()
{
NewTime temp1();//NewTime default 생성자로 ()을 넣어 temp1 선언
NewTime temp2; //NewTime default 생성자로 () 없이 temp2 선언
NewTime temp3(3, 30, 2);//NewTime 생성자로 temp3 초기화
temp1.print(); //출력 Error
temp2.print(); //정상출력
temp3.print(); //정상출력
/*
일 : 0
시간 : 0
분 : 0
일 : 2
시간 : 3
분 : 30
*/
return 0;
}
※ default 생성자 선언 시 ( ) 을 넣는 것과 안 넣는 것의 차이
- ( ) 있을 때: 선언은 하지만 값을 대입은 하지 않은 "빈 상태"의 클래스
- ( ) 없을 때: 사전에 초기화한 default 값을 대입한, 말 그대로 default 상태의 클래스
(사내개발자 선생님께서 알려주신 꿀팁입니다... 감사합니다 ^^)
※ 해당 게시글은 개인 학습의 목적으로, 아래 강의를 수강한 후 정리한 학습노트입니다.
'C++ 프로그래밍 > 기초 문법' 카테고리의 다른 글
[C++ 기초 문법] 동적결합 Class Array (0) | 2024.02.18 |
---|---|
[C++ 기초 문법] 상속(Inheritance) virtual, public 다형 (0) | 2024.02.17 |
[C++ 기초 문법] operator<< 오버로딩 (0) | 2024.02.15 |
[C++ 기초 문법] friend (0) | 2024.02.14 |
[C++ 기초 문법] 연산자 오버로딩 (0) | 2024.02.13 |