lzth.net
当前位置:首页 >> 虚基类怎么写 >>

虚基类怎么写

虚基类是相对于它的派生类而言的,它本身可以是一个普通的类. 只有它的派生类虚继承它的时候,它才称作虚基类,如果没有虚继承的话,就称为基类.比如类b虚继承于类a,那类a就称作类b的虚基类,如果没有虚继承,那类b就只是类a的基类. 虚继承主要用于一个类继承多个类的情况,避免重复继承同一个类两次或多次. 例如 由类a派生类b和类c,类d又同时继承类b和类c,这时候类d就要用虚继承的方式避免重复继承类a两次.

当在多条继承路径上有一个公共的基类,在这些路径的某几条汇合处,这个公共的基类就会产生多个实例62616964757a686964616fe78988e69d8331333332643833(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明

不太懂你的意思,具体说一下吧:这里C在D1,D2上继承,但有两个基类,所以用虚基类,这样C 在B中的数据的副本就只有一份,所以保持了统一型;具体的使用还是一样,就是,在C的构造函数的初始化列表中调用的是B的构造函数,但是关于D1,D2的的构造函数在列表中也要列出来,为了初始化在D1,D2中继承的新的数据,D1,D2中的对B的构造函数的调用时无效的,其实原理是一样的 ( 主要就是理解构造函数 )

在派生类继承基类时,加上一个virtual关键词则为虚拟基类继承,如:class derive : virtual public base { }; 虚基类主要解决在多重继承时,基类可能被多次继承,虚基类主要提供一个基类给派生类,如:class B { }; class D1 : public B { }; class D2

虽然我很聪明,但这么说真的难到我了

当某类的部分或全部直接基类是从另一个基类派生而来,这些直接基类中,从上一级基类继 承来的成员就拥有相同的名称,派生类的对象的这些同名成员在内存中同时拥有多个拷贝, 我们可以使用作用域分辨符来唯一标识并分别访问它们.我

这里的问题不是说虚基类不对,其实是你的display()函数的问题,display()函数就是要打印成员变量,所以就把变量都打印出来了.如果想看虚继承的顺序的话,就把打印的函数放在构造函数内部就行.程序如下:#include <iostream>

/*①行调用了基类的构造函数,在B类和C类的构造函数A(a1,b)和A(a2,c)又分别调用了A类的构造函数,此时编译器无法确定由B还是C的构造函数来调用A类的构造函数,在这种情况下,即使a1和a2的值相同,C++仍然约定调用A类的缺省构造函数,所以输出x=0.当然也可以直接调用的构造函数,如②行,则结果为x=1. */

虚基类并不是一种新的类型的类,而是一种派生方式.采用虚基类方式定义派生类,在创建派生类的对象时,类层次结构中虚基类的成员只出现一次,即基类的一个副本被所有派生类对象所共享. 采用虚基类方式定义派生类的方法是在基类的前面加上关键字virtual,而定义基类时与一般基类完全一样. 如: class B : virtual public A { public: int b; }; class C : virtual public A { public: int c; };

虚基类的作用是解决多继承问题时而产生的二义性问题.使用虚基类为最远的派生类提供唯一的基类成员,而不重复产生多次拷贝例如 SleeperSofa() :Sofa(),Bed(){}对于SleeperSofa类来说,虚基类Furniture在SleeperSofa处汇合,SleeperSofa

9213.net | sichuansong.com | gpfd.net | hyqd.net | mtwm.net | 网站首页 | 网站地图
All rights reserved Powered by www.lzth.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com