面试之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() {
          
   }
};
    编译结果如下
经验分享 程序员 微信小程序 职场和发展