Inheritance 의 이해 - ⑥ Object Slicing Inheritance의 이해 - ⑥ Object Slicing C++의 상속관계에서 Object slicing은 의도하지 않았던 결과를 일으킬 수 있기 때문에 알아두는 것이 필요하다. 아래의 코드를 살펴보자. class Animal { public: virtual void Speak() { std::cout Computer Science/C++ 3년 전
Inheritance 의 이해 - ⑤ Virtual Inheritance Inheritance 의 이해 - ⑤ Virtual Inheritance 앞서 다중 상속 글에서 아래와 같이 다이아몬드 상속이 이루어질 경우 조상 클래스인 animal 클래스가 두번 생성된다고 설명했다. 이 문제는 가상 상속(Virtaual Inheritance)으로 해결할 수 있다. 이번 글에서는 가상 상속이 메모리 레벨에서 어떻게 동작하는지 살펴본다. 먼저 가상 상속을 사용하는 방법은 다음과 같다. class Animal { public: virtual void Speak() { std::cout Computer Science/C++ 3년 전
Inheritance 의 이해 - ④ Multiple Inheritance Multiple Inheritance 지금 까지는 한 부모로부터만 상속받는 단일 상속을 알아보았다. 하지만 다음과 같은 상황을 생각해볼 수 있다. 위 그림처럼 Lion 클래스와 Tiger 클래스 모두에게서 상속받아서 Liger 클래스를 만들 수 있다. 이때 발생할 수 있는 몇 가지 특징을 살펴보자. class Lion { public: virtual ~Lion() = default; private: double LionData; }; class Tiger { public: virtual ~Tiger() = default; private: double TigerData; }; class Liger : public Lion, public Tiger { public: private: double LigerDa.. Computer Science/C++ 3년 전
Inheritance 의 이해 - ③ Abstract / Interface class 추상 클래스(Abstract class)와 인터페이스 클래스 (Interface class) 순수 가상 함수(Pure virtual function) 가상 함수의 선언만 있고 정의가 없는 클래스를 순수 가상 함수(Pure virtual function)이라고 한다. C++에서는 virtual function에 0을 붙여서 만들 수 있다. 순수 가상 함수를 가진 클래스는 객체를 생성할 수 없다. class Animal { public: virtual ~Animal() = default; virtual void Speak() = 0; // pure virtual function private: }; 추상 클래스 (Abstract class) 순수 가상함수를 하나라도 가지고 있는 클래스를 추상 클래스 (Abs.. Computer Science/C++ 3년 전