正文

学习C++多重继承遇到的问题及解决2009-09-23 22:26:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bigpig/48036.html

分享到:

先说下问题,我声明了一个基类,X,然后又从X虚拟派生了两个类,Y,Z。接着定义类A,A从Y,Z派生而来。X,y,z中均含有一个void f()函数。现在我在main中定义如下:X *px;A a;px=&a;px->f();delete px;在运行的时候发现px->f()调用的是X中的f().而不是我想像中的A中指定的Y::f()中的f(),经过查阅书本,问题已经解决,先归纳如下:X,Y,Z类中都含有同一个方法,A有派生于Y,Z,因此定义了一个A的实例后,调用f()方法,在这里如果不指名调用哪一个类中的方法,将会产生错误,为了避免此问题的产生,可以采取的方法如下:(假设我们调用的事Y类中的方法)1、在A类中指名,如:using Y::f();2、在代码中使类Y的派生层次高于类Z的派生层次,因为派生层次越高,调用具有同名的方法时优势越大。举个例子:     在这个问题中我们可以这样定义:我们可以使 Y:virtual public X{   public:    void f();}Z:public Y{}A:public Z,virtual public X{}此时声明A的实例在调用f()。则调用的是Y中的方法。还有:   Y:virtual public X{   public:    void f();}Z:virtual public X{}A:public Y,public Z{}此时声明A的实例在调用f()。则调用的也是Y中的方法。这就是优势,即派生层次越高,调用同名的方法时有时越明显

阅读(2224) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册