여기서는 C++에서 상속을 방지하는 방법을 살펴보겠습니다. 상속을 방지하는 개념을 최종 클래스라고 합니다.
Java 또는 C#에서는 final 클래스를 사용할 수 있습니다. C++에는 그러한 직접적인 방법이 없습니다. 여기서 우리는 C++에서 최종 클래스를 시뮬레이션하는 방법을 볼 것입니다.
여기에서 MakeFinalClass(기본 생성자는 private임)라는 추가 클래스를 하나 생성합니다. 이 함수는 우리의 목적을 해결하는 데 사용됩니다. 기본 클래스 MyClass는 친구 클래스이므로 MakeFinalClass의 생성자를 호출할 수 있습니다.
한 가지 주의해야 할 점은 MakeFinalClass도 가상 기본 클래스라는 것입니다. MyClass가 아닌 MyDerivedClass의 생성자를 통해 MakeFinalClass의 생성자를 호출하기를 원하기 때문에 가상 기본 클래스로 만들 것입니다. 구체 클래스의 생성자에 의해 호출됨).
예시
#include <iostream> using namespace std; class MyClass; class MakeFinalClass { private: MakeFinalClass() { cout << "This is constructor of the MakeFinalClass" << endl; } friend class MyClass; }; class MyClass : virtual MakeFinalClass { //this will be final class public: MyClass() { cout << "This is constructor of the final Class" << endl; } }; //try to make derived class class MyDerivedClass : MyClass { public: MyDerivedClass() { cout << "Constructor of the Derived Class" << endl; } }; main() { MyDerivedClass derived; }
출력
In constructor 'MyDerivedClass::MyDerivedClass()': [Error] 'MakeFinalClass::MakeFinalClass()' is private
이것은 MakeFinalClass의 친구이고 생성자에 액세스할 수 있으므로 MyClass의 개체를 만들 수 있습니다.
예시
#include <iostream> using namespace std; class MyClass; class MakeFinalClass { private: MakeFinalClass() { cout << "This is constructor of the MakeFinalClass" << endl; } friend class MyClass; }; class MyClass : virtual MakeFinalClass { //this will be final class public: MyClass() { cout << "This is constructor of the final Class" << endl; } }; main() { MyClass obj; }
출력
This is constructor of the MakeFinalClass This is constructor of the final Class