在 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
热门推荐
10 祝女儿简短祝福语大全
11 大学新年祝福语简短创意
12 元旦适合的祝福语简短
13 朋友出远门祝福语简短
14 初六简短的祝福语
15 祝男孩生日祝福语简短
16 同事调离的祝福语简短
17 拜年红包的祝福语简短
18 妈妈生日祝福语简短励志