求学快递网是国内领先的B2M2C教育培训网上信息平台!

首页 | 分站加盟 | 课程发布 | 最新课程 | 最新机构 | 培训专题 | 全国分站 | 帮助中心

计算机等级考试_计算机等级考试报名_计算机考试成绩查询_求学快递网

计算机等级考试一步到位
您的位置:求学快递网 > 计算机等级考试 > 应试技巧 > 网友妙招:计算机四级C++与面向对象的问题的备考经验 - 正文内容

网友妙招:计算机四级C++与面向对象的问题的备考经验

网友妙招:计算机四级C++与面向对象的问题的备考经验

 

求学快递网计算机等级考试专题重点推荐:2016年计算机等级考试报考时间 计算机等级考试证书领取时间2016年计算机等级考试报考指南2016年计算机等级考试大纲2016年计算机等级考试政策2016年计算机等级考试报考条件2016年计算机等级考试科目等最新新闻资讯。

 

先看这个:

class base

{

public:

int b;

void print() {cout 《 "base" 《 endl;}

};

class derived1 : public base

{

public:

int d1;

};

class derived2 : public base

{

public:

int d2;

};

class grandson : public derived1,public derived2

{

public:

int g;

};

这里,我们让derived1和derived2继承base,再让grandson继承derived1和derived2,我们是想实现一个菱形结构:

我们可以写出主程序:

void main()

{

grandson gs;

// gs.b = 1;

// gs.base::b = 1;

// gs.print();

}

看见我加注释的那三句话了吗?每句都会报错的!为什么那?

 

因为,想实现棱形结构只是我们的一厢情愿!我们又没告诉编译器,编译器哪有那么聪明!

实际结构是这样的:

所以我们应该这样写main函数:

void main()

{

grandson gs;

gs.derived1::b = 1;

gs.derived2::b = 1;

gs.derived1::print();

gs.derived2::print();

}

可以看到,从基类base继承来的成员b和print()函数在grandson中都有两份,这可不是我们想要的!因为这两个b是一样的,都是从base来的;print()也是!

其实,这个问题很好解决,科学家发明了关键字virtual来解决这个问题:

class base

{

public:

int b;

void print(){cout 《 "base" 《 endl;}

};

class derived1 : virtual public base

{

public:

int d1;

};

class derived2 : virtual public base

{

public:

int d2;

};

class grandson : public derived1,public derived2

{

public:

int g;

};

 

现在我们可以这样写主函数了:

void main()

{

grandson gs;

gs.b = 1;

gs.base::b = 1;

// gs.derived1::b = 1;

// gs.derived2::b = 1;

gs.print();

// gs.derived1::print();

// gs.derived2::print();

}

现在,grandson的b和print都只有一份了,所以编译器不会再告诉我们“ambiguous”了!

当然,按我加注释那几句那么写也没问题,反正现在b和print()都是各占一份内存空间,不再分derived1和derived2继承过来的,是从他们两个共同从base继承过来的。

请注意,对于base,我们什么也没做,他现在就叫做虚基类,因为derived1和derived2在继承时加了关键字virtual!

在现实世界中这种情况是很多见的,比如公司的临时销售人员,又有销售人员的属性,也有临时人员的属性;还有中国老师上课常用的老师和研究生派生的助教的例子,等等。

总之,你只要记住:当你想实现棱形结构时,请使用virtual!

 

 

 

关注求学快递网计算机等级考试专题,帮你了解最新的计算机等级考试资讯2016年计算机等级考试成绩查询,让你轻松备考计算机等级考试!

求学快递网计算机等级考试专题的小编们根据网民搜索喜爱,第一时间公布2016年计算机一级考试报名网址2016年计算机二级考试模拟试题2016年计算机三级考试历年真题2016年计算机四级考试复习资料供广大求学爱好者学习使用,欢迎继续关注求学快递网计算机等级考试专题,并给我们提供宝贵的意见!

 

相关推荐

计算机等级考试最新机试技巧
计算机等级考试高效利用技巧

最新计算机资讯

热点专题

计算机等级考试经验技巧分享

关于本站  诚征英才  广告服务  招生服务  免责声明  分站加盟  VIP会员  联系我们  网站地图  网站记事

版权所有 CopyRight 2008-2017 粤ICP备14009694号 www.studyems.com, Inc. All Rights Reserved
违法和不良信息举报邮箱:2881796407@qq.com 举报电话: