반응형
생성자 상속이라는 문법이 있다.
https://learn.microsoft.com/ko-kr/cpp/cpp/constructors-cpp?view=msvc-170#inheriting_constructors
class Base {
public:
Base()
{
std::cout << "Call : Base()" << '\n';
}
Base(int a)
{
std::cout << "Call : Base(int)" << '\n';
}
Base(const std::string& a)
{
std::cout << "Call : Base(const std::string&)" << '\n';
}
};
class Derived : public Base {
public:
using Base::Base;
};
int main()
{
Derived d1;
Derived d2(0);
Derived d3("0");
return 0;
}
원래 C++은 클래스를 상속할 경우 부모생성자의 호출을 위해 자식클래스의 생성자를 명시적으로 적을 필요가 있었다.
하지만 생성자 상속이란 문법을 사용해서 생략할 수 있다 (ㄷㄷ)
위 코드에서 Derived클래스는 원래 같았으면 부모생성자의 생성자를 명시적으로 적어줘야 했지만 using Base::Base;를 써줌으로써 기본 생성자, int형을 받는 생성자, const std::string&를 받는 생성자가 자동으로 정의된다.
-실행결과
잘쓰면 코드가독성에 매우 도움이 될 것 같다?
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 복사 생성자(+복사 대입 연산자)를 알아보자.araboza (4) | 2024.09.12 |
---|---|
[C++] is_base_of<> 특정 클래스를 상속 받았는지 확인하는 함수 (2) | 2024.09.08 |
[C++] String 클래스 구현해보기 (0) | 2024.07.26 |
[C++] DFS 구현해보기 (0) | 2024.07.10 |
[C++] operator 연산자 (0) | 2024.06.14 |