상속
- A 클래스가 B클래스를 상속하게 되면 A클래스는 B클래스의 모든 멤버(변수, 함수)를 상속받는다.
- 이 때 A클래스를 유도 클래스, 자식 클래스 하위 클래스 등으로 부르고 B클래스를 기초 클래스, 부모 클래스, 상위 클래스등으로 부른다. (유도 클래스와 기초 클래스를 일반적으로 사용됨)
- 유도 클래스는 기초 클래스의 모든 멤버변수를 가져오기때문에 유도 클래스 생성자를 호출할때 기초 클래스의 모든 변수를 초기화해야한다. (기초 클래스를 초기화할때 기초 클래스의 생성자로 초기화하자)
Student: public Person
{
private:
int grade
}
Student(char *name, int age, int grade)
:Person(name, age) // 기초 클래스의 생성자로 초기화
{
this->grade = grade;
}
- 유도 클래스의 생성자에서 기초 클래스의 생성자를 호출하지 않으면 기초 클래스의 void 생성자가 호출된다.
- 기초 클래스의 생성자 호출 -> 유도 클래스의 생성자 호출 -> 유도 클래스의 소멸자 호출 -> 기초 클래스의 소멸자 호출 (스택 구조)
protected
- 외부에서 접근할 수 없고 클래스 내에서나 상속하는 유도 클래스에서 접근이 가능하다.
하지만 기초 클래스와 유도 클래스 사이에서도 정보 은닉은 유지되는게 좋다.
세가지 상속
- private 상속
기초 클래스의 private는 접근불가
기초 클래스의 protected, public을 private로 상속받음
- protected 상속
기초 클래스의 private는 접근불가
기초 클래스의 public은 protected로 상속받음
- public 상속
기초 클래스의 private는 접근불가
나머지는 있는 그대로 상속받음
다중상속외에는 public 상속만 생각해도 문제없다.
상속을 위한 조건
- IS-A
전화기 - 무선 전화기
컴퓨터 - 노트북 컴퓨터
무선 전화기 is a 전화기
노트북 컴퓨터 is a 컴퓨터
특성을 그대로 다 가져올 수 있는 집합내의 집합일 경우에 사용
- HAS-A
총 - 경찰
분필 - 교사
경찰 has a 총
교사 has a 분필
하지만 HAS-A는 잘 쓰이지 않는다.
총을 든 경찰 분필을 든 교사만 표현할 수 있기때문에
총 객체를 private 멤버변수로 선언하는 편이다.
class AccountHandler
{
private:
Account* accList[100]; // 계좌 관리자가 소유한 계좌
int accNum;
public:
AccountHandler();
int ShowMenu() const; // 메뉴출력
void MakeAccount(); // 계좌계설
void DepositMoney(); // 입 금
void WithdrawMoney(); // 출 금
void ShowAllAccInfo() const; // 잔액조회
int GetAccNum() const;
~AccountHandler();
};
- 4행에서 계좌리스트를 멤버로 선언했다.
'프로그래밍 언어 > 열혈 C++' 카테고리의 다른 글
10. 연산자 오버로딩 1 (0) | 2022.03.13 |
---|---|
08 상속과 다형성 by 윤성우의 열혈 C++ (0) | 2022.03.08 |
06 const, friend, static, mutable by 윤성우의 열혈 C++ (0) | 2022.03.07 |
05 복사 생성자 by 윤성우의 열혈 C++ (0) | 2022.03.06 |
04-4 클래스와 배열 그리고 this 포인터 by 윤성우의 열혈 C++ (0) | 2022.03.05 |