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

西安知名的集团门户网站建设费用网站建设是否属于技术合同

西安知名的集团门户网站建设费用,网站建设是否属于技术合同,网站开发技术的现状及发展趋势,免费制作网站appMI描述的是有多个直接基类的类。与单继承一样,公有MI表示的也是is-a关系。例如,Worker派生出Singer和Waiter,再从Singer和Waiter派生出SingingWaiter。但多重继承会带来许多问题,最主要的两个便是 从两个不同的基类继承的同名方法…

        MI描述的是有多个直接基类的类。与单继承一样,公有MI表示的也是is-a关系。例如,Worker派生出Singer和Waiter,再从Singer和Waiter派生出SingingWaiter。但多重继承会带来许多问题,最主要的两个便是

  • 从两个不同的基类继承的同名方法
  • 从两个或更多相关基类哪里继承同一个类的多个实例

        就上述两个问题,下面根据举例Worker继承给出相关解决方法

有多少Worker

        Worker派生出Singer和Waiter,Singer和Waiter再派生出SingerWaiter,则SingingWaiter将包含两个Worker,这将可能出现二义性

SingingWaiter ed;
Worker*pw=&ed;//是哪个Worker的地址呢?

        所以这里需要使用类型转换来指定对象。

Worker *pw1=(Waiter*) &ed;//Waiter中的Worker地址
Worker *pw2=(Singer*) &ed;//Singer中的Worker地址

         这使得使用基类指针来引用不同对象变得复杂,但真正的问题是为什么需要多个Worker?SingingWaiter的对象是一个单独的人,不该带有两个Worker对象。为此我们需要引入虚基类来确保从多个类派生出的对象只继承一个基类对象。

虚基类

class Singer:virtual public Worker{...}
class Waiter:public virtual Worker{...}//virtual的位置无关紧要
class SingingWaiter:public Singer,public Waiter{...}

        上述代码声明使得Worker被用作Singer和Waiter的虚基类,且SingingWaiter对象只包含了一个Worker子对象。

        使用虚基类时,需对类构造函数采用一种新的方法。C++在基类是虚的时,禁止信息通过中间类自动传递给虚类。因此派生类实现的多重继承需要直接调用基类的构造函数(与非虚基类不允许越过上一级不同)。

SingingWaiter(const Worker&wk,int p=0,int v=Singer::other):Waiter(wk,p),Singer(wk,v){}
//这里wk信息不会传递到虚基类,因为两条途径不同会产生冲突
//会自动调用Worker的默认构造函数SingingWaiter(const Worker&wk,int p=0,int v=Singer::other):Worker(wk),Waiter(wk,p),Singer(wk,p){}
//这样显式调用构造函数Worker可阻止Worker默认构造函数的调用

        注意:这种用法在虚基类是合法的,且必须这样做;但对于非虚基类,这样是非法的。

使用哪个方法

        我们希望通过SingingWaiter调用show()方法(同时被Singer和Waiter拥有),但直接调用会导致二义性,不知道会调用哪个直接祖先的方法。于是,我们可以通过使用作用域解析运算符来表示意图。

SingingWaiter n("ew",2005,6,soprano)
n.Singer::Show();//调用Singer的版本

        但更好的方法是在SingingWaiter中重新定义Show(),并指出希望使用哪一个Show()。

void SingingWaiter::Show()
{Singer::Show();
}//希望SingingWaiter使用Singer版本的Show()

        在单继承中可以使用递增的方式显示类的信息(基类显示基类的,派生类调用基类方法加上派生类的信息,以此类推)。但多重继承不行,这样会忽略部分信息或是重复显示信息。所以多重继承应使用模块化方法:提供一个Worker组件的方法和一个只显示Waiter组件或Singer组件的方法,再在SingingWaiter方法中调用上述方法。

        另一种方法是将所有数据组件都设置为保护的而非私有的。

虚基类与支配

        使用虚基类将改变C++解析二义性的方式。使用虚基类时,派生类使用从多个基类那里继承得到的同名成员名,如果不使用类名限定,也不一定会导致二义性。这种情况下,如果某个名称优先于其他所有名称,则使用它且不导致二义性。

        如何判断优先性呢?派生类中的名称优先于直接或间接祖先中的相同名称。

class B
{
public:short q();...
};class C:virtual public B
{
public:short q;int omg()...
};
class D:public C
{
...
};
class E:virtual public B
{
private:int omg();...
};class F:public D,public E
{...
};

        类C中q()定义优先于类B中的q()定义,因为C时从B类派生来的。任何一个omg()定义都不优先于其他omg()定义,因为C和E都不是对方的基类。(虚二义性与访问规则无关)


文章转载自:

http://XGtFsK32.kpgms.cn
http://5wd7TL38.kpgms.cn
http://nO0Bgzu2.kpgms.cn
http://dAjbbj7L.kpgms.cn
http://honSBxEG.kpgms.cn
http://HeNfwsgE.kpgms.cn
http://cUhmLdYp.kpgms.cn
http://Dzqv90Hz.kpgms.cn
http://7gDlRFBo.kpgms.cn
http://Zas6P1ml.kpgms.cn
http://IS35YnG8.kpgms.cn
http://7M6jjX1G.kpgms.cn
http://04KAwraw.kpgms.cn
http://MCoOGHEv.kpgms.cn
http://ymkXofqQ.kpgms.cn
http://HAWiv86t.kpgms.cn
http://WtZij5tr.kpgms.cn
http://0RzOLzmz.kpgms.cn
http://kecgOXJM.kpgms.cn
http://3wJXmUjh.kpgms.cn
http://xIWXx9ic.kpgms.cn
http://A9WJhMrQ.kpgms.cn
http://2gkYmew3.kpgms.cn
http://RKrXHmIk.kpgms.cn
http://yKoGo3Eg.kpgms.cn
http://BgXVuaoP.kpgms.cn
http://tjKLXxOX.kpgms.cn
http://Mi0Dgl5X.kpgms.cn
http://JlGWhrgO.kpgms.cn
http://VOUdDQxI.kpgms.cn
http://www.dtcms.com/wzjs/739673.html

相关文章:

  • 上海平台网站建设公爱站网官网关键词查询
  • 上海公司黄页网站wordpress导入微信
  • 响应式网站好处深圳最新招聘
  • 网站效果检测c2c模式的网站有哪些
  • 百度商桥网站代码去哪里添加非你莫属做网站的卖网币起家的
  • 网站策划任职要求网站建设吉金手指专业15
  • 南京淄博网站建设方案钢管网站建设
  • 做哪个app软件网站排名优化和竞价
  • 合肥建设干部学校网站首页dw做的网站怎么全屏
  • 沈阳做网站需要多少钱响应式网站 哪些
  • 网站做专题提升权重机械 网站源码
  • 做python项目的网站深圳免费网站排名优化
  • 客户评价 网站商城网站验收
  • 网站提示404error顺企网哈尔滨网站建设
  • 内网网站建设主流语言网站后台发布图片upload failed
  • 宜宾建设机械网站南宁模板开发建站
  • 网站跳出率因素菏泽网站建设方案
  • wordpress文章大网站移动端开发语言
  • 做cps要做什么类型的网站鹰潭网站商城建设
  • 学校网站开发的背景芍药居网站建设公司
  • 黑龙江住房和城乡建设厅网站首页小清新网站源码
  • 玉田建设局网站吉安工商注册官方网站
  • 西安网站建设排名免费ppt资源网站
  • 西宁市城北区建设网站官网cms
  • 网络管理系统登录白城网站seo
  • 公司网站界面如何设计移动网站建设模板
  • 自己做网站能否赚钱6建设官方网站企业登录
  • python培训机构岳阳seo公司
  • 四川省建设注册资格中心网站wordpress模板最新
  • 做好史志网站建设如何制作橡皮泥 简单