码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-05 10:49:30      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:c++   继承   

构造函数是实现继承的关键,子类对象在构造时,首先调用父类的构造函数,在调用自己的构造函数。

#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(){}
      ^
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++实现一个不能被继承的类

标签:c++   继承   

原文地址:http://blog.csdn.net/xueyuehanzhu123/article/details/44079145

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!