C++ 求教高手 读程序写结果?希望能讲得详细点!!谢谢了。

#include <iostream>
using namespace std;
class Base {
public:
void fun1(){cout<<"Base\n";}
virtual void fun2(){cout<<"Base\n";}
};
class Derived:public Base {
public:
void fun1(){cout<<"Derived\n";}
void fun2(){cout <<"Derived\n";}
};
void f(Base& b){b.fun1();b.fun2();}
void main() {
Derived obj;
f(obj);
}

为什么是结果是:
Base
Derived

首先声明了obj是一个派生类类型(记住这是实际类型)
调用f(obj);时,obj被强制转换成Base类型,调用b.fun1();时Base类中fun1函数没有virtual关键字,编译器不知道调用实际类型Derived中的fun1,所以调用了Base类中的,调用fun2时,有了关键字virtual,编译器会在虚表中找obj的实际类型对应的函数,就是Derived中的fun2.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-21
不客气

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网