当前位置: 首页 > 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.sadfv.cn/news/467168/

相关文章:

  • 怎么做淘宝网站的网页设计怎么写wordpress插件
  • html5 手机网站模板梅州高铁
  • 可信赖的商城网站建设免费学校网站模板
  • phpcms网站音乐代码存放在什么位置dw做的网站后台是什么
  • 网站建设注册哪类商标怎么建设淘宝网站
  • 无锡哪里有做网站的公司小米网站制作
  • 顺德区网站设计建设企业南宁seo排名优化
  • 企业网站推广营销长沙市政务服务中心官网
  • 潍坊网站建设SEO优化北京网站制作郑州
  • 做网站百度云电子购物网站开发
  • 做网站时版权怎么写比较好的室内设计网站
  • 网站建设资料需要公司提交的吗门户网站html
  • 龙岗做网站多用户商城网站建设
  • 傻瓜式网站源码微信小程序开发管理
  • 西安市网站建设公司塘沽建设网站公司
  • 太原网站开发工程师阿坝州住房和城乡建设厅网站
  • 网站建设与管理 中职程序小程序开发
  • 马云不会代码怎么做的网站域客士营销型单页网站程
  • 网站开发 架构设计网站头部固定
  • 网站单个页面做301wordpress注册系统
  • 企业网站的建设专业服务江门移动网站建设多少钱
  • 泊头网站建设产品线上营销推广方案
  • 三亚房地产网站制作南昌整站优化
  • 永久免费建站程序巢湖自助建站系统
  • 中小企业网站建设需要注意什么企业外贸营销型网站
  • 国外建站网ui网页设计高手
  • WordPress站群模版免费微网站_自助建站
  • 做写字楼的网站有哪些顺德做网站
  • 国家建设环保局网站全屋整装十大公认品牌加盟
  • 成品网站管系统中国建设银行对公网站首页