이번 시간에는 상속에 대해서 알아보겠습니다.
아래는 간단한 상속 관계의 샘플 코드입니다.
#include <iostream>
class Base
{
std::string s;
public:
Base() : s("기반") { std::cout << s << " 클래스 constructor" << std::endl; }
void what() { std::cout << s << " 클래스 변수" << std::endl; }
};
class Derived : public Base
{
std::string s;
public:
Derived() : Base(), s("파생")
{
std::cout << s << " 클래스 constructor" << std::endl;
// Base 에서 what() 을 물려 받았으므로
// Derived 에서 당연히 호출 가능하다
what();
}
};
int main()
{
std::cout << " === 기반 클래스 생성 ===" << std::endl;
Base p;
std::cout << " === 파생 클래스 생성 ===" << std::endl;
Derived c;
return 0;
}
실행 결과 - 기반 클래스의 what 함수가 실행되면서 기반 클래스 변수 값이 출력된다.
아래와 같이 파생 클래스 내부에 what 함수를 추가하면 어떻게 되는지 확인해 봅시다.
class Derived : public Base
{
std::string s;
public:
Derived() : Base(), s("파생")
{
std::cout << s << " 클래스 constructor" << std::endl;
// Base 에서 what() 을 물려 받았으므로
// Derived 에서 당연히 호출 가능하다
what();
}
// 파생 클래스 내부에 what 함수를 추가.
void what() { std::cout << s << " 클래스 변수" << std::endl; }
};
실행 결과 - 당연한 결과로 파생 클래스 변수가 호출된다. 이것을 우리는 오버라이딩(overriding) 이라고 합니다.
'C++' 카테고리의 다른 글
[C++] 상속(inheritance) - up casting, virtual (0) | 2023.02.17 |
---|---|
[C++] 상속(inheritance) - protected, private 키워드 (0) | 2023.02.16 |
[C++] 포인터 - 연산자 오버로딩(overloading) (0) | 2023.02.14 |
[C++] 포인터 - 얕은복사/깊은복사(샘플3), 생성자, 소멸자 (0) | 2023.02.03 |
[C++] 포인터 - 얕은복사/깊은복사(샘플2) (0) | 2023.02.03 |