클래스 상속 (1)

SOEUN CHOI·2022년 5월 30일
0

C++_study

목록 보기
5/15

씹어먹는 C++

7장 클래스의 상속 270p - 297p


상속(Inheritance)

다른 클래스의 내용을 그대로 포함할 수 있는 작업을 가능하도록 함

상속을 통해 다른 클래스의 정보를 물려 받아서 사용 가능

  • 부모, 자식 클래스/ 기반, 파생 클래스
    상속 받는 클래스 : 자식 / 파생

example code - Base / Derived

class Base {
	std::string s;
	public:
		Base() : s("기반") { std::cout << "기반 클래스" << std::endl; }
		void what() { std::cout << s << std::endl; }
};

class Derived : public Base {
	std::string s;
	public:
		Derived() : Base(), s("파생") {
			std::cout << "파생 클래스" << std::endl;
			// Base 에서 what() 을 물려 받았으므로
			// Derived 에서 당연히 호출 가능하다
			what();
		}
};

int main() {
	std::cout << " === 기반 클래스 생성 ===" << 		std::endl;
	Base p;
	std::cout << " === 파생 클래스 생성 ===" << 		std::endl;
	Derived c;
	return 0;
}

=== 기반 클래스 생성 ===
기반 클래스
=== 파생 클래스 생성 ===
기반 클래스
파생 클래스
기반

  • Derived 생성자는 초기화 리스트에서 기반의 생성자를 호출해서 기반의 생성을 먼저 처리
    - 파생 클래스 가 출력하기 이전에 Base 의 생성자가 호출되어서 기반 클래스 가 먼저 출력
  • What()
    - Base 의 모든 정보를 상속 받았기 때문에 Derived
    에서도 what() 호출 가능
    - 만약 Derived에서 what을 동일하게 정의해 준다면
    Derived what()이 Base what()을 오버라이딩 되어
    Derived what()이 호출 되어 '파생'이 출력 됨

protected

접근 지시자 protected

상속받는 클래스에서는 접근 가능하고 그 외의 기타 정보는 접근 불가능

  • protected
    외부에서 접근 불가능. 단, 상속 받으면 가능
  • private
    외부에서 접근 불가능. 자기 자신 class만 가능
  • public
    외부에서 접근 가능

class 상속 접근 지시자

class A : public(접근 지시자) B

  • public 상속
    기반 클래스의 접근 지시자들에 영향 없이 그대로 작동

  • protected 상속
    public 은 protected로 바뀜 나머지는 그대로 유지

  • private 상속
    모든 접근 지시자들이 private으로 바뀜

profile
soeun choi

0개의 댓글