| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1094 人关注过本帖
标题:[求助]关于虚基类
只看楼主 加入收藏
cpp
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-9-3
收藏
 问题点数:0 回复次数:5 
[求助]关于虚基类

我在书里看到这样一句话:

“使用虚基类可以避免由于同一基类多次拷贝而引起的二义性”——《C++程序设计基础》 张基温

请高手们过来解释一下这里的“二义性”(最好附有实例),可是我觉得

多次拷贝实际上都是同一个基类,不可能会引起什么“二义性”呀。换句话说使用虚基类是不是多此一举啊?

搜索更多相关主题的帖子: 基类 
2004-10-02 21:38
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

virtual关键字作用:

class base{ private: //... public: int fun(); //... }

class live41: public base { private: //... public: int fun(); //... }

void main() { live41 confuse; confuse.fun(); //编译器不知道你调用哪个类的函数 }

加了virtual就不同,具体怎么不同自己看书吧!

2004-10-02 23:15
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

虚拟也叫动态联编,烦人的内容也最后运行时再解决,这就不用在编译时就定义好哪个函数。就是说让运行时的程序自己选择要调用了两个同名函数中的哪个!

题外话:C#中多了个override关键字,直接把调用确定为使用派生类的函数,不用在选择。也就是修改了自类的意思,遮蔽功能。

2004-10-02 23:18
cpp
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-9-3
收藏
得分:0 

版主说的好象是虚函数吧

class Base0

{

……

};

class Base1: virtual public Base0

{

……

};

class Base2: virtual public Base0

{

……

};

class Derive: public Base1,pulblic Base2

{

……

};

这里所谓的虚基类是指 “ Base0” 吗?

2004-10-05 22:30
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

哦~~~对,不好意思,老糊涂了哦~~~你对。是虚基类,我见在C++这样声明不多用,Java和C#倒用得多。这样用和不加有什么分别呢?我也想知道,哪位说一下?

估计也是动态联编吧,PS:动态联编也叫后期联编。我看的是钱能的书,封面是红色的那本。

[此贴子已经被作者于2004-10-06 00:43:41编辑过]

2004-10-06 00:37
liuxuskzx
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2004-7-20
收藏
得分:0 
为了节省空间吧,把“爷爷”类定义为虚基类,那样通过不同的继承路径到达“孙子”类后可以只存储一个副本。不对别打偶啊
2004-10-06 10:46
快速回复:[求助]关于虚基类
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017905 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved