如何防止C ++中的类继承

在这里,我们将看到如何防止C ++中的继承。防止继承的概念称为最终类。

在Java或C#中,我们可以使用最终类。在C ++中,没有这样的直接方法。在这里,我们将看到如何在C ++中模拟最终类。

在这里,我们将创建一个额外的类,称为MakeFinalClass(其默认构造函数为private)。此功能用于解决我们的目的。主类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;
      }
};
//尝试使派生类
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