在 C++ 中模拟最终类
在Java或C#中,我们可以使用final类。最后的班级是特殊类型的班级。我们不能扩展那个类来创建另一个类。在C++中没有这种直接的方式。在这里,我们将看到如何在C++中模拟最终类。
在这里,我们将创建一个名为MakeFinalClass的额外类(其默认构造函数是私有的)。这个函数就是用来解决我们的目的的。主类MyClass可以调用MakeFinalClass的构造函数,因为它们是朋友类。
我们必须注意的一件事是,MakeFinalClass也是一个虚拟基类。我们将其设为虚拟基类,因为我们要通过MyDerivedClass的构造函数调用MakeFinalClass的构造函数,而不是MyClass(虚拟基类的构造函数不是由继承自它的类调用,而是由其继承的构造函数调用)由具体类的构造函数调用)。
示例
#include输出结果using namespace std; class MyClass; class MakeFinalClass { private: MakeFinalClass() { cout << "This is constructor of the MakeFinalClass" << endl; } friend class MyClass; }; class MyClass : virtual MakeFinalClass { //这将是最后一堂课 public: MyClass() { cout << "This is constructor of the final Class" << endl; } }; //尝试制作派生类 class MyDerivedClass : MyClass { public: MyDerivedClass() { cout << "Constructor of the Derived Class" << endl; } }; main() { MyDerivedClass derived; }
In constructor 'MyDerivedClass::MyDerivedClass()': [Error] 'MakeFinalClass::MakeFinalClass()' is private
我们可以创建MyClass的对象,因为它是MakeFinalClass的朋友,并且可以访问其构造函数。
示例
#include输出结果using namespace std; class MyClass; class MakeFinalClass { private: MakeFinalClass() { cout << "This is constructor of the MakeFinalClass" << endl; } friend class MyClass; }; class MyClass : virtual MakeFinalClass { //这将是最后一堂课 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