Computer >> 컴퓨터 >  >> 프로그램 작성 >> 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