C++实现一个不能被继承的类

来源:互联网 发布:mac改铃声 编辑:程序博客网 时间:2024/06/06 02:42

要设计一个不能被继承的类,考虑C++11的新特性的话,有三种方法:

(1)就是将该类的构造函数和析构函数设为private(或者仅仅将析构函数设为private),这样派生类无法调用基类的构造函数和析构函数,从而不能继承。要创建对象,可以在该类中设一个static成员函数,提供返回一个该类对象指针,这种方法比较普遍就不细说。需要注意的是这种方法导致对象只能在heap中产生。那如何能构造一个正常对象的class而又不能被继承呢?

(2)C++11提供final关键字。final关键字的作用:1.用于防止类型被继承;2.用于防止虚函数被重写。 

(3)利用虚继承

#include <iostream>using namespace std;template<class T>class A{    friend T;private:    A(){cout<<"A()"<<endl;};    ~A(){cout<<"~A()"<<endl;}};class B:virtual public A<B>{public:    B(){cout<<"B()"<<endl;}    ~B(){cout<<"~B()"<<endl;}};/*class C:public B{public:    C(){cout<<"C()"<<endl;}    ~C(){cout<<"C()"<<endl;}};*/class D final{public:    D(){cout<<"D()"<<endl;}    ~D(){cout<<"~D()"<<endl;}};/*class E:public D{public:    E(){cout<<"E()"<<endl;}    ~E(){cout<<"E()"<<endl;}};*/int main(){    B b;    return 0;}
这里的virtual是必须的。

0 0