没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
C++虚函数及虚函数表解析
一、背景知识(一些基本概念)
虚函数(Virtual Function):在基类中声明为 virtual 并在一个或多个派生类中被重新
定义的成员函数。
纯虚函数(Pure Virtual Function):基类中没有实现体的虚函数称为纯虚函数(有纯虚
函数的基类称为虚基类)。
C++ “虚函数”的存在是为了实现面向对象中的“多态”,即父类类别的指针(或者引用)指
向其子类的实例,然后通过父类的指针(或者引用)调用实际子类的成员函数。通过动态
赋值,实现调用不同的子类的成员函数(动态绑定)。正是因为这种机制,把析构函数声
明为“虚函数”可以防止在内存泄露。
实例:
#include <iostream>using namespace std;
class base_class
{public:
base_class()
{
}
virtual ~base_class()
{
}
int normal_func()
{
cout << "This is base_class's normal_func()" << endl;
return 0;
}
virtual int virtual_fuc()
{
cout << "This is base_class's virtual_fuc()" << endl;
return 0;
}
};
class drived_class1 : public base_class
{public:
drived_class1()
{
}
virtual ~drived_class1()
{
}
int normal_func()
{
cout << "This is drived_class1's normal_func()" << endl;
return 0;
}
virtual int virtual_fuc()
{
cout << "This is drived_class1's virtual_fuc()" << endl;
return 0;
}
};
class drived_class2 : public base_class
{public:
drived_class2()
{
}
virtual ~drived_class2()
{
}
int normal_func()
{
cout << "This is drived_class2's normal_func()" << endl;
return 0;
}
virtual int virtual_fuc()
{
cout << "This is drived_class2's virtual_fuc()" << endl;
return 0;
}
};
int main()
{
base_class * pbc = NULL;
base_class bc;
drived_class1 dc1;
drived_class2 dc2;
pbc = &bc;
pbc->normal_func();
pbc->virtual_fuc();
pbc = &dc1;
pbc->normal_func();
pbc->virtual_fuc();
pbc = &dc2;
pbc->normal_func();
pbc->virtual_fuc();
return 0;
}
输出结果:
This is base_class's normal_func()
This is base_class's virtual_fuc()
This is base_class's normal_func()
This is drived_class1's virtual_fuc()
This is base_class's normal_func()
剩余17页未读,继续阅读
资源评论
lljnh
- 粉丝: 0
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功