面试之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版)
