如何防止 C++ 中的类继承
在这里,我们将看到如何在 C++ 中防止继承。防止继承的概念称为最终类。
在 Java 或 C# 中,我们可以使用最终类。在 C++ 中没有这种直接的方式。在这里,我们将看到如何在 C++ 中模拟最终类。
在这里,我们将创建一个名为 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP