热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

c++设计一个不能被继承的类以及原因分析

设计一个不能被继承的类templateclassMakeFinal{friendT;private:MakeFinal(){}~MakeFinal(){

设计一个不能被继承的类

template <typename T>
class MakeFinal
{friend T;private :MakeFinal() {}~MakeFinal() {}
};class FinalClass : virtual public MakeFinal<FinalClass>
{
public :FinalClass2() {}~FinalClass2() {}
};class Try : public FinalClass
{
public :Try() {}~Try() {}
};Try temp;

由于类FinalClass是从类MakeFinal虚继承过来的&#xff0c;在调用Try的构造函数的时候&#xff0c;会直接跳过FinalClass而直接调用MakeFinal的构造函数。非常遗憾的是&#xff0c;Try不是MakeFinal的友元&#xff0c;因此不能调用其私有的构造函数。

c&#43;&#43;设计一个不能被继承的类&#xff0c;为什么必须是虚继承&#xff1f;原因分析

详解&#xff1a;https://my.oschina.net/cuilili/blog/323696
附&#xff1a;
在虚继承中&#xff0c;虚基类是由最终的派生类初始化的&#xff0c;换句话说&#xff0c;最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说&#xff0c;虚基类是间接基类&#xff0c;而不是直接基类。这跟普通继承不同&#xff0c;在普通继承中&#xff0c;派生类构造函数中只能调用直接基类的构造函数&#xff0c;不能调用间接基类的。


推荐阅读
author-avatar
怎么又是你呀
你讲话咧,撸起袖子加油干!!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有