面试之C++:不能被继承的类
一.构造函数与析构函数设置为private
-
派生类B的构造函数进行构造时,需要使用基类A的构造函数,而把A的构造函数放到private作用域中,B在构造时无法调用,因此A无法被继承。析构函数同理。 此时类A不能创建对象,要想A类能正常使用,可以使用以下的两种方式。
#include <iostream> using namespace std; class A { A() { } ~A() { } }; class B: public A { public: B() { } ~B() { } };
-
编译结果如下
二.使用友元实现
-
使用一个具有private构造函数的Final类限制A类不能被继承
#include <iostream> using namespace std; class A; // 前向声明 class Final { // 默认private权限 friend class A; Final() { } }; class A: virtual public Final { public: A() { cout << "A()" << endl; } }; class B: public A { public: B() { cout << "B()" << endl; } }; int main(void) { B b; return 0; }
-
编译结果如下
三.C++11 关键字
-
使用C++11关键字final限制类,表示此类不能被继承
#include <iostream> using namespace std; class A final { }; class B: public A { public: B() { } ~B() { } };
-
编译结果如下
上一篇:
Java基础知识总结(2021版)