注册 登录
编程论坛 C++教室

求解

zhangfuhua 发布于 2008-02-22 20:39, 897 次点击
#include<iostream>

using namespace std;

class base
{public:
        void who(){cout<<"base class"<<endl;}
};

class derive1:public base
{public:
        void who(){cout<<"derive1 class"<<endl;}
};

class derive2:public base
{public:
        void who(){cout<<"derive2 class"<<endl;}
};     

      
int main()
{
    base obj1,*p;
    derive1 obj2;
    derive2 obj3;
    p=&obj1;
    p->who();
    p=&obj2;
    p->who();
    p=&obj3;
    p->who();
    obj2.who();
    obj3.who();


return 0;
}
6 回复
#2
zhangfuhua2008-02-22 20:40
答案:
base class
base class
base class
derive1 class
derive2 class
为什么?
#3
sunkaidong2008-02-22 20:51
我已经在你得另一个问题里面帮你回答了
使用基类指针访问派生类,虽然派生类成员函数可以覆盖基类成员函数,但是要通过对象覆盖,指针是不可以的,要想实现覆盖,就必须用虚函数,实现动态联编.就可以实现多态了.

[[it] 本帖最后由 sunkaidong 于 2008-2-22 20:56 编辑 [/it]]
#4
sunkaidong2008-02-22 21:12
个人观点:
 基类对象访问基类中定义成员,派生类对象访问在派生类中定义的成员和从基类中继承的成员(如果重载了以派生类为准).如果涉及基类指针访问派生类只能访问从基类中继承的成员.一旦有虚函数,就会出现动态联编.用基类指针访问的是派生类中的同名虚函数(基类中也有)

[[it] 本帖最后由 sunkaidong 于 2008-2-22 21:15 编辑 [/it]]
#5
zhangfuhua2008-02-23 09:49
[bc01] 谢谢!
#6
hero20072008-02-23 10:18
sunkaidong君回答的很好,LZ确实要再仔细看看多态性相关的章节。
#7
zhangfuhua2008-03-04 21:24
谢谢
基本的搞明白了
1