관리 메뉴
Automotive Software
상속 (Inheritance) 본문
- 상속 (Inheritance) : 기존 클래스의 속성을 새로운 클래스 기본 속성으로 사용하는 것
- 파생 (Derivation) : 상속된 속성에 새로운 속성을 추가하여 클래스를 생성하는 것
// class 클래스_명 : 파생형 베이스_클래스_명
e.g) class myClass : public myBaseClass
- 접근 명시자 (Access specifier)
- public : 멤버 함수와 변수를 클래스 외부에서 접근 가능
- private : 멤버함수와 변수를 클래스 외부에서 접근 불가능
- protected : 멤버함수와 변수를 클래스 외부에서 접근 불가능하나 파생된 클래스에서는 가능
- 생성자와 소멸자 실행 순서
- 베이스 클래스 생성자 -> 신규 클래스 생성자 -> 신규 클래스 소멸자 -> 베이스 클래스 소멸자
- 상속 시 베이스 클래스에 초기화 값 전달
class cMyBaseClass
{
public:
cMyBaseClass();
cMyBaseClass(int initVal);
~cMyBaseClass();
...
private:
int baseMemVar;
};
class cMyClass : public cMyBaseClass
{
public:
cMyClass();
cMyClass(int initBaseMemVal, int initMemVal);
~cMyClass();
...
private:
int memVar;
};
// 베이스 생성자에게 초기화 값 전달하는 법
cMyClass::cMyClass():
cMyBaseClass(),
memVar(0)
{
}
cMyClass::cMyClass(int initBaseMemVal, int initMemVal):
cMyBaseClass(initBaseMemVal),
memVar(initMemVal)
{
}
- 함수 재생(Overriding) 과 중첩(Overloading)
구분 | 반환값 | 함수명 | 매개변수 목록 | 함수내 구현 |
함수 중첩(Overloading) | 상이 | 동일 | 상이 | 상이 |
함수 재생(Overriding) | 동일 | 동일 | 동일 | 상이 |
- 함수 중첩 시 유의 사항
- 오직 반환값만 상이한 중첩은 허용되지 않음
- 함수 재생 시 유의 사항
- 베이스 클래스에 다수의 중첩 함수들이 파생 함수 내 하나의 재생 함수에 은폐(hiding)되어 사용 불가
- 베이스 클래스내 함수의 직접적인 호출
// 베이스_클래스_명::함수_명()
cMyBaseClass::memFunc(0);
- 가상 함수(Virtual Method)
- 베이스 클래스의 특정 함수를 파생 클래스에서 정의한 다양한 함수로 동적으로 변경하여 사용할 수 있도록 선언하는 함수
- 가상 함수가 있으면 반드시 소멸자도 가상 함수로 구현
- 오직 참조자와 포인터를 이용하여 사용 가능
- 파생 클래스에서는 가상 함수 키워드를 사용하지 않아도 되나 가독성을 위해 사용하는 것을 추천
class cMyBaseClass
{
public:
cMyBaseClass(){}
virtual ~cMyBaseClass(){}
virtual void baseMemFunc(){ cout<<"func() from my base class"; }
};
class cMyClass:cMyBaseClass
{
public:
virtual void baseMemFunc() { cout<<"func() from my class"; }
};
'프로그래밍 (Programming) > C++ (C Plus Plus) 기초' 카테고리의 다른 글
정적 멤버 변수 및 함수 (Static Member and Function) (0) | 2021.01.11 |
---|---|
다형성 (Polymorphism) (0) | 2021.01.07 |
연산자 중첩 (0) | 2020.12.29 |
객체 초기화 (0) | 2020.12.29 |
멤버함수 기본값 vs 멤버함수 중첩 (0) | 2020.12.28 |