TIL::Today I Learn

[TIL] 20230721

madylin 2023. 7. 28. 14:42
반응형

오늘 공부한 내용📓

- C++

개념 공부

다이아몬드 상속

  • 하나의 클래스가 두개 이상의 클래스로부터 상속 받는 구조
    A
  /   \
B       C
  \   /
    D
  • 다이아몬드 상속에는 D 클래스에서 A 클래스의 멤버 변수나 멤버 함수에 접근할 때, B나 C 중 어떤 클래스를 기반으로 하는지 모호하다는 문제가 있어 잘 사용하지 않는 상속 방법
  • C++ 에는 다이아몬드 문제를 해결하기 위해 가상 상속을 지원함.
    • 가상상속은 다이아몬드 상속 구조에서 공통된 기본 클래스를 가상으로 상속하여, 다이아몬드 구조를 일반적인 트리구조로 바꿔주는 기법
    • virtual 키워드를 사용하여 공통된 클래스를 가상으로 상속
class A {
    // ...
};

class B : virtual public A {
    // ...
};

class C : virtual public A {
    // ...
};

class D : public B, public C {
    // ...
};
  • B 와 C에서 A의 멤버변수와 멤버함수를 공유하기 때문에, B > C 순서로 생성자가 호출되며 A의 멤버변수를 초기화할 경우, C의 내용으로 덮어쓰기 됨

 

제가 공부한 내용을 기록하고 있습니다.

혹시 수정이 필요한 부분이 있다면, 댓글로 지적 부탁드립니다!

선한 관심과 도움 감사드립니다😊

반응형

'TIL::Today I Learn' 카테고리의 다른 글

[TIL] 20230726  (0) 2023.07.28
[TIL] 20230723  (0) 2023.07.28
[TIL] 20230720  (0) 2023.07.28
[TIL] 20230719  (0) 2023.07.28
[TIL] 20230718  (0) 2023.07.28