基类指针NEW一个派生类对象,如何使这个指针可以调用派生类方法

[复制链接]
查看11 | 回复4 | 2011-6-3 13:50:43 | 显示全部楼层 |阅读模式
class A
class B public class A
A *p = new B()
p不能使用派生类方法。。。

回复

使用道具 举报

千问 | 2011-6-3 13:50:43 | 显示全部楼层
根本不可能调用的。因为基类本身就没有扩展类的功能。就像是class animal{};class fish:public animal{};class chicken:public animal{};fish 和 chicken都是animal,有相同的类属性,但是也具有各自的类属性,如果试图用基类指针来引用派生类的成员函数,那就好象是让fish在陆地上走,让chicken在水里游一样了。从来就没有这样设计的,调用什么类的成员函数就用什么类的指针。不过确实有些有一点相似的设计,可以看看COM\COM+相关的资料,它用的是一个virtualTable来实现指针的指向的,通过查询来返回特定类的接口的,但绝不是你这样子调用的。...
回复

使用道具 举报

千问 | 2011-6-3 13:50:43 | 显示全部楼层
如果你说的方法不是重写基类的虚函数的话,则基类的指针无法调用派生类的方法.若是指多态,则可以通过在基类中定义虚函数,派生类重写这个函数。就可以在运行时动态调用对应的派生类方法了....
回复

使用道具 举报

千问 | 2011-6-3 13:50:43 | 显示全部楼层
这需要用到虚函数. #include using namespace std;class A{public:virtual void print()//关键字virtual声明一个函数是虚函数{cout<<"我是类A"<<endl;}};class B : public A...
回复

使用道具 举报

千问 | 2011-6-3 13:50:43 | 显示全部楼层
首先这个方法在基类中应该是个虚函数,才能实现多态...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行