找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1014|回复: 5

[求助]关于虚基类

[复制链接]
发表于 2009-10-31 01:12:18 | 显示全部楼层 |阅读模式 IP:江苏扬州
我在书里看到这样一句话:
“使用虚基类可以避免由于同一基类多次拷贝而引起的二义性”——《C++程序设计基础》 张基温
请高手们过来解释一下这里的“二义性”(最好附有实例),可是我觉得
多次拷贝实际上都是同一个基类,不可能会引起什么“二义性”呀。换句话说使用虚基类是不是多此一举啊?
发表于 2009-10-31 01:12:19 | 显示全部楼层 IP:江苏扬州
virtual关键字作用:
class base{ private: //... public: int fun(); //... }
class live41: public base { private: //... public: int fun(); //... }
void main() { live41 confuse; confuse.fun(); //编译器不知道你调用哪个类的函数 }
加了virtual就不同,具体怎么不同自己看书吧!
回复

使用道具 举报

发表于 2009-10-31 01:12:20 | 显示全部楼层 IP:江苏扬州
虚拟也叫动态联编,烦人的内容也最后运行时再解决,这就不用在编译时就定义好哪个函数。就是说让运行时的程序自己选择要调用了两个同名函数中的哪个!
题外话:C#中多了个override关键字,直接把调用确定为使用派生类的函数,不用在选择。也就是修改了自类的意思,遮蔽功能。
回复

使用道具 举报

发表于 2009-10-31 01:12:21 | 显示全部楼层 IP:江苏扬州
版主说的好象是虚函数吧
class Base0
{
……
};
class Base1: virtual public Base0
{
……
};
class Base2: virtual public Base0
{
……
};
class Derive: public Base1,pulblic Base2
{
……
};
这里所谓的虚基类是指 “ Base0” 吗?
回复

使用道具 举报

发表于 2009-10-31 01:12:22 | 显示全部楼层 IP:江苏扬州
哦~~~对,不好意思,老糊涂了哦~~~你对。是虚基类,我见在C++这样声明不多用,Java和C#倒用得多。这样用和不加有什么分别呢?我也想知道,哪位说一下?
估计也是动态联编吧,PS:动态联编也叫后期联编。我看的是钱能的书,封面是红色的那本。
回复

使用道具 举报

发表于 2009-10-31 01:12:23 | 显示全部楼层 IP:江苏扬州
为了节省空间吧,把“爷爷”类定义为虚基类,那样通过不同的继承路径到达“孙子”类后可以只存储一个副本。不对别打偶啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 15:23 , Processed in 0.211266 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表