如何防止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
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短