在 C++ 中模拟最终类

在 Java 或 C# 中,我们可以使用 final 类。最后的班级是特殊类型的班级。我们不能扩展那个类来创建另一个类。在 C++ 中没有这种直接的方式。在这里,我们将看到如何在 C++ 中模拟最终类。

在这里,我们将创建一个名为 MakeFinalClass 的额外类(其默认构造函数是私有的)。这个函数就是用来解决我们的目的的。主类 MyClass 可以调用 MakeFinalClass 的构造函数,因为它们是朋友类。

我们必须注意的一件事是,MakeFinalClass 也是一个虚拟基类。我们将其设为虚拟基类,因为我们要通过 MyDerivedClass 的构造函数调用 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 {    //这将是最后一堂课
   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 <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 {     //这将是最后一堂课
   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