focus on linux, c/c++, lua

最初对虚函数的理解

#include <stdio.h>
#include <vector>
using namespace std;

class CBase
{
public:
CBase()
{

}

~CBase()
{

}

virtual void fun1()
{
   printf("base fun1\n");
}

void fun2()
{
   printf("base fun2\n");
}

void fun3()
{
   fun1();
   fun2();
}
};

class CSon : public CBase
{
public:
CSon()
{

}

~CSon()
{

}

void fun2()
{
   printf("son fun2\n");
}
};

int main()
{
CSon son;
son.fun3();
return 0;
}

输出结果是base fun1和base fun2

因为son没有重新定义fun3,就直接获取到父类的函数地址运行,这里没有进行动态绑定的判断,是直接获得。当子类的函数没有被重写,子类会直接找到父类的函数地址进行运行,virtual和非virtual得区别在于,声明的对象virtual可以用父类的指针来声明,在调用函数的时候,系统会动态绑定真正的函数地址。


posted on 2010-10-20 10:07 zuhd 阅读(272) 评论(0)  编辑 收藏 引用 所属分类: c/c++


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