您的位置:首页 > 编程语言 > C语言/C++

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

2015-03-05 10:41 225 查看
构造函数是实现继承的关键,子类对象在构造时,首先调用父类的构造函数,在调用自己的构造函数。

#include <iostream>

using namespace std;

template <typename T>
class A
{
public:
friend T;
private:
A(){}
~A(){}
};

class B:virtual public A <B>
{
public:
B(){}
~B(){}
};

//class C:virtual public B
//{
//  public:
//      C(){}
//      ~C(){}
//};

int main()
{
B b;
//  C c;


定义一个友元类friend T,B在继承的时候,用自己去具体化A,将自己设置为A的友元类,这样就可以访问A的私有函数(构造函数),B就可以正常定义对象b,C虚继承B,但是友元关系不能继承。所以C在构造时,不能调用A的构造函数,如果打开注释部分,将报下边的错误。

template.cpp: In constructor ‘C::C()’:

template.cpp:11:3: error: ‘A<T>::A() [with T = B]’ is private

   A(){}

   ^

template.cpp:25:6: error: within this context

   C(){}

   
4000
  ^

template.cpp:12:3: error: ‘A<T>::~A() [with T = B]’ is private

   ~A(){}

   ^

template.cpp:25:6: error: within this context

   C(){}

      ^

template.cpp: In destructor ‘C::~C()’:

template.cpp:12:3: error: ‘A<T>::~A() [with T = B]’ is private

   ~A(){}

   ^

template.cpp:26:7: error: within this context

   ~C(){}

       ^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 继承