一.构造函数与析构函数设置为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 {
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() {}
};
- 编译结果如下