我在书里看到这样一句话:
“使用虚基类可以避免由于同一基类多次拷贝而引起的二义性”——《C++程序设计基础》 张基温
请高手们过来解释一下这里的“二义性”(最好附有实例),可是我觉得
多次拷贝实际上都是同一个基类,不可能会引起什么“二义性”呀。换句话说使用虚基类是不是多此一举啊?
virtual关键字作用:
class base{ private: //... public: int fun(); //... }
class live41: public base { private: //... public: int fun(); //... }
void main() { live41 confuse; confuse.fun(); //编译器不知道你调用哪个类的函数 }
加了virtual就不同,具体怎么不同自己看书吧!
虚拟也叫动态联编,烦人的内容也最后运行时再解决,这就不用在编译时就定义好哪个函数。就是说让运行时的程序自己选择要调用了两个同名函数中的哪个!
题外话:C#中多了个override关键字,直接把调用确定为使用派生类的函数,不用在选择。也就是修改了自类的意思,遮蔽功能。
版主说的好象是虚函数吧
class Base0
{
……
};
class Base1: virtual public Base0
class Base2: virtual public Base0
class Derive: public Base1,pulblic Base2
};
这里所谓的虚基类是指 “ Base0” 吗?
哦~~~对,不好意思,老糊涂了哦~~~你对。是虚基类,我见在C++这样声明不多用,Java和C#倒用得多。这样用和不加有什么分别呢?我也想知道,哪位说一下?
估计也是动态联编吧,PS:动态联编也叫后期联编。我看的是钱能的书,封面是红色的那本。
[此贴子已经被作者于2004-10-06 00:43:41编辑过]