C 语言程序设计

发布 2021-04-26 17:50:28 阅读 6862

10章多重继承的问题。

一、多重继承的先后问题。

上章最后的例子是为下面讨论一个被称之为“菱形问题”作铺垫的,在j**a中没有多重继承,也许没有这种现象,c++中很容易出现。由一个基类派生出两个类出来,以后新定义一个类,并从这两个类多重继承,这样就出现菱形问题了。也就是说,基类的公有或保护成员,必然被两个派生类同时继承,这两个类同时派生一个新类时,同名成员就产生了冲突。

下面我们先从简单问题入手,先不要看结果图,考虑一下结果应该是什么。小雅当初认为三行输出的id都应为“wd8503025”,但事实不是这样。

#include

#include

using namespace std;

class cbase

class cderive2 : public cbase

class cson : public cderive2, public cderive1 ;

int main (

cson s;

= "wd8503026";

= "wd8503027";

= "wd8503025";

cout <

return 0;

通过设置断点不难看出,当前实例是cbase的“孙子”,而“父亲”有2个,每个“父亲”都将“爷爷”复制了一份。如果不指定哪个“父亲”的“父亲”,默认将第一个继承的“父亲”的“父亲”当作“爷爷”。上例中先继承cderive2类,所以31行和34行的“等价于“

二、实例地址的调查。

下面的例子是先定义一个“孙子”的实例,并将地址输出。再将这个实例的地址分别赋给cderive1和cderive2类型的指针变量,并输出指针地址。再将这2个地址分别赋给cbase的2个指针变量,并输出其地址。

大家仍然不看结果,考虑一下答案应该是什么?

#include

#include

using namespace std;

class cbase

class cderive1 : public cbase ;

class cderive2 : public cbase ;

class cson : public cderive2, public cderive1

int main (

cson s;

cout <

cout <

cderive1 *pd1 = s;

cout <

cderive2 *pd2 = s;

cout <

cout <

cbase *pb1 = pd1;

cout <

cbase *pb2 = pd2;

cout <

//cbase *pb = s; /编译有错。

return 0;

从上例可以看出,由于2个“父亲”因而复制出2个“爷爷”,2个“爷爷”的地址也不同。

三、虚继承。

解决以上问题只要用c++的“虚继承”就可以了。“虚继承”就是在实例中,基类不管继承多少个,只复制一份。

#include

#include

using namespace std;

class cbase

/因为虚继承,cbase类在此不产生副本。

class cderive2 : virtual public cbase

class cson : public cderive2, public cderive1 ;

int main (

cson s;

= "wd8503026";

= "wd8503027";

= "wd8503025";

cout <

return 0;

因为2个“父亲”都不产生“爷爷”的副本,所以“孙子”这儿就只有一个“爷爷”的副本。

C语言程序设计

c语言程序设计 试题十。返回。一 单项选择题 共30分,每题1分 1.下列不正确的转义字符是 a b c 074 d 0 2.不是c语言提供的合法关键字是 a switch b cher c case d default 3 正确的标识符是 a a b a 2 c a.3 d a 3 4 下列字符中...

C语言程序设计

熟悉和掌握全国等考二级c的上机答题要点。1 全国计算机等级考试二级c语言上机填空题答题要点。1 试题中用 found 来提示在下一行有一个空需填写。2 填写空白时,先要将下划线删除,然后再填空。3 每个空只填写一条语句或表达式。4 不要改动程序行的顺序,更不要自行添加程序结构。2 全国计算机等级考试...

c语言程序设计 选择结构程序设计

实验三。一 实验目的。1 正确使用关系表达式和逻辑表达式表示条件。2 学习分支语句if和switch的使用方法。3 进一步熟悉vc集成环境的使用方法,学习vc环境提供的调试工具。二 实验内容 包含实验要求,算法说明,源程序 运行结果截图 例2三 分析与思考 误差分析 结果分析,调试总结 mif x ...