Robin Chow's C++ Blog

 

[导入]虚拟函数和重载

如下面的程序:
#include < iostream > using namespace std;class base{ public: virtual void f(char i){ cout << "Base class: " << i << endl; }; virtual void f(double d){ cout << "Base class: " << d << endl; } }; class derived : public base{ public: void f(char i){ cout << "Derived class: " << i << endl; } }; int main(int argc, char** argv) { base *pb = new derived; pb->f(2.0); delete pb; return 0; }
开始的时候感觉有点迷惑,被调用的是 base 的 f 呢?还是 derived 的 f(需要进行参数类型转换)。实验证明,被调用的是 base 的 f。 因为重载是根据静态类型来选择函数的,亦即由 pb 本身的类型来决定。而虚拟则是根据动态类型来选择函数,由 pb 指向的对象类型决定。因此编译器首先根据重载来选择一个基类的函数,如果该函数为虚拟函数且被派生类实现,则再通过多态机制调用派生类函数。
文章来源:http://my.donews.com/robinchow/2007/01/11/ocipmucddsvoutkpnwjgeqrlwadgilgxnoma/

posted on 2007-10-23 20:51 Robin Chow 阅读(82) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜