当前位置: 首页 > news >正文

南宁网站seo推广公司制作微信商城网站开发

南宁网站seo推广公司,制作微信商城网站开发,无锡网站建设推广,三室两厅两卫装修实景原文地址#xff1a;http://blog.csdn.net/lazy_tiger/article/details/2224899 一个类不能被继承#xff0c;也就是说它的子类不能构造父类#xff0c;这样子类就没有办法实例化整个子类从而实现子类无法继承父类。我们可以将一个类的构造函数声明为私有#xff0c;使得这…原文地址http://blog.csdn.net/lazy_tiger/article/details/2224899   一个类不能被继承也就是说它的子类不能构造父类这样子类就没有办法实例化整个子类从而实现子类无法继承父类。我们可以将一个类的构造函数声明为私有使得这个类的构造函数对子类不可见那么这个类也就不能继承了。但是这引出一个问题客户程序岂不是也无法实例化这个类了OK让我们参考一下Singleton模式用一个static函数来帮助创建这个类的实例问题就解决了   1 class CParent2 {3 private:4 CParent(int v){m_v v;}5 ~CParent(){}6 int m_v;7 static CParent * m_instance;8 public:9 void fun(){cout The value is: m_v endl;} 10 static CParent * getInstance(int v); 11 }; 12 CParent * CParent::m_instance NULL; 13 CParent * CParent::getInstance(int v) 14 { 15 m_instance new CParent(v); 16 return m_instance; 17 }   这是一个有效的方法但是static函数创建出来的实例必然是static的。而且这个类不能像普通的类那样构建对象比如   1 CParent c; // impossible 换个思路考虑一下友元不也是不能被继承的么我们可以把类的构造函数定义为private的同时定义友元函数来帮助构造类的实例。 class CParent { private: CParent(int v){m_v v;} ~CParent(); int m_v; public: void fun(){cout The value is: m_v endl;} friend CParent * getInstance(int v); }; CParent * getInstance(int v) { CParent * pinstance new CParent(v); return pinstance; } 这个类也是不能被继承的但是出现的问题和前面一样我们还是不能像对普通类那样对待这个类。 现在设想一下有一个CParent类我们不希望他能够被继承。在友元不能被继承的思路指引下我们要考虑让CParent的友元属性不能被继承。假设有一个辅助类CNoHeritanceCParent是CNoHeritance类的友元。还要假设一个CChild类它试图去继承CParent类如果它有这个能耐的话。 先把CNoHeritance类的构造函数定义成private然后将CParent声明为CNoHeritance的友元类。同时CParent继承了CNoHeritance类。到目前为止CNoHeritance除了CParent类以外谁也无法对它进行访问和实例化。CChild因为无法继承CParent的友元特性所以CChild无法对CNoHeritance直接进行实例化但是可以通过CParent。 到目前为止CParent还是可以被继承的。这是一个trick.让我们整理一下思路下面的图说明了CNoHeritance, CParent和CChild三个类之间的关系。   如果我们让CParent类虚继承CNoHeritance类根据虚继承的特性虚基类的构造函数由最终的子类负责构造。因此CChild如果要想继承CParent它必须能够构造CNoHeritance这是不可能的因此我们的CParent也就终于成为了一个无法继承的类。   1 class CNoHeritance2 {3 private:4 CNoHeritance(){}5 ~CNoHeritance(){}6 friend class CParent;7 };8 class CParent : virtual public CNoHeritance9 { 10 public: 11 CParent(int v){m_v v;} 12 ~CParent(){}; 13 private: 14 int m_v; 15 public: 16 void fun(){cout The value is: m_v endl;} 17 }; 18 class CChild : public CParent 19 { 20 public: 21 CChild():CParent(10){} 22 ~CChild(){} 23 }; 需要注意的是我们这里引入的CNoHeritance类对整个程序而言只引入了Private的构造函数和析构函数所以不会因为可能的菱形继承带来二义性.          转载于:https://www.cnblogs.com/theCambrian/p/3501806.html
http://www.yutouwan.com/news/467168/

相关文章:

  • 浪网站制作手写代码网站
  • 福建省住房城乡和城乡建设厅网站连接品硕网线做怎么弹网站
  • 网站开发人员的要求聂教练做0网站
  • 大型门户网站建设美丽雅布设计作品
  • 江苏省建设局网站证件查询小程序免费制作平台360
  • 网页设计作品论文seo网站运营
  • 有关网站开发的文献大连网站怎么推广
  • 建立网站编程福州建站模板搭建
  • 网站建设深圳官网孝感网站建设公司
  • 商务网站建设工程师公司简介模板范本
  • 网站排名如何做福州做网站销售公司
  • 浙江省人才网官方网站建设厅招聘遵义市 网站建设
  • 公司网站建设需求分析网站建设服务条款
  • 烟台网站建设多少钱wordpress字体插件
  • 室内装修网站html源码 企业网站建设整体设计流程
  • 电脑网站素材广州企业网站建设方案
  • wordpress评论生成中卫网站推广优化公司
  • primefaces做网站汉阳做网站
  • 软件公司网站建设做网站哪些公司
  • 网站文案标准格式怎么做网站挣钱
  • 常宁网站开发兰州有制作网站
  • vps 网站异常沈阳做网站有名公司
  • 厦门建设工程招标中心的网站上海市建设合同信息表网站
  • 怎么做网站盗号泗县网站建设
  • 海淀教育人才网站wordpress排行榜模板
  • 白酒营销网站哪家网络么司做网站好
  • 白银网站运行百度联盟注册
  • 做网站怎么回本电子商务网站建设目标及利益分析
  • 长沙门户网站开发如何用word做简单的网站
  • 成华区微信网站建设推广成品app直播源码推荐