不能被继承的类
来源:互联网 发布:郭德纲网络剧 编辑:程序博客网 时间:2024/06/04 18:56
解题思路:
1、C++中的子类构造函数会自动的调用父类的构造函数,子类析构函数会自动调用父类的析构函数。那么把构造和析构函数定义为私有的,就不能被继承了。
2、缺陷:定义为私有函数时,要在类外创建类的对象,只能实现成要么在栈上创建要么在堆上创建。
//因为构造函数和析构函数都为私有的,所以他不能被继承//缺陷:它只能在堆上生成,不能在栈上生成。class A{public:static A& GetObject(int a){return *new A(a);}private: //把构造函数声明为私有的A(int a){_a=a;}~A(){delete this;}int _a;};
优化:利用虚继承。
//所以用虚继承来实现,可以在堆上创建对象,也可以在栈上创建对象template <typename T>class C{friend T; //友元类型private:C(){}~C(){}int _a;};class D:virtual public C<D> //D是C的友元类型,所以D可以访问C的私有函数,来实现创建对象{public:D(){} ~D(){}}; //D不能被继承1.将C的构造和析构函数定义为私有函数,它不能被继承,因为不会提供一个创建对象的接口,所以它不能在类外使用。
2.把D定义成C的友元类型,D就可以调用C的所有函数,包括私有函数,使用D来创建C的对象时,它可以在堆上创建也可以在栈上创建。
3.同时D不能被继承。假设E继承了D,在调用E的构造函数时,会跳过D而直接调用C的构造函数,因为C的构造函数为私有的并且E不是C的友元类型,所以它不能调用C的构造函数。
阅读全文
0 0
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能被继承的类
- 不能继承的类
- 不能继承的类
- c++写不能被继承的类
- DBNAVIGATOR使用
- oracle_DBA_临时表_约束
- 斯人若彩虹,遇上方知有
- vmware设置共享文件夹
- C++学习笔记
- 不能被继承的类
- HDOJ 4865 Peter's Hobby(概率dp, viterbi)
- 《Scrum实战》知易行难
- NDK编译——x86 支持
- Reshape the Matrix
- Python变量的三个特征获取方式
- Ubuntu16.04 x64服务器配置最新tcp拥塞控制算法bbr
- 大规模图像分类器的演化-Large-Scale Evolution of Image Classifiers-读后杂谈
- POJ 1031--Fence