C++ 中模拟 final 类


在 Java 或 C# 中,可以使用 final 类。final 类是一种特殊类型的类。不能扩展该类以创建另一个类。在 C++ 中没有这种直接的方法。下面我们将了解如何在 C++ 中模拟 final 类。

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

我们必须注意一件事,MakeFinalClass 也是一个虚基类。我们将使其成为虚基类,因为我们想通过 MyDerivedClass 的构造函数而不是 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 {    //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

我们可以创建 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 {     //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

更新日期:2019 年 7 月 30 日

405 次浏览

开启你的职业生涯

通过完成课程获得认证

立即开始
广告