Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 클래스 상속을 방지하는 방법

<시간/>

여기서는 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