C++实现一个不能被继承的类
2015-03-05 10:41
225 查看
构造函数是实现继承的关键,子类对象在构造时,首先调用父类的构造函数,在调用自己的构造函数。
定义一个友元类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(){}
^
#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++实现一个不能被继承的类
- 用C++实现一个不能被继承的类
- 用C++实现一个不能被继承的类
- 用C++实现一个不能被继承的类
- 设计一个不能被继承的类-C++实现(来源于剑指名企offer)
- c++中如何实现一个不能被继承的类
- [阿里] C++ 实现一个 不能继承的类
- 【c++】实现一个不能被继承的类
- C++实现一个不能被继承的类
- 用C++实现一个不能被继承的类
- C++能设计实现一个不能被继承的类吗
- 用C++设计一个不能被继承的类实现java final的作用
- 用C++实现一个不能被继承的类
- 用C++实现一个不能被继承的类
- C++ 中不能被继承的类实现,及从中体现virtual 继承的一个特性
- C++实现一个不能继承的类
- 面试题:C++实现一个不能被继承的类
- 用 C++ 设计一个不能被继承的类
- [转]用C++ 设计一个不能被继承的类
- 用C++设计一个不能被继承的类