#include <iostream>
#include <string.h>
using namespace std;
class test
{
public:
test()
{
m_i = 10;
/*构造函数当中调用虚函数,没问题
因为给虚函数表赋值的代码在构造
函数函数体之前已经完成了(在{花括号之前已经完成),所以这也
是通过虚函数表调用的。
*/
abc();
}
virtual void abc()
{
cout<<"abc()"<<endl;
}
virtual void abd()
{
cout << "abd()" << endl;
/*通过查询虚函数表调用*/
abc();
/*使用类范围操作符调用,这种压制住了虚拟机制,
不在通过虚函数表调用,而是直接调用,和调用普通
成员函数一样*/
test::abc();
}
private:
int m_i;
};
class yy : public test
{
public:
int m_j;
};
int main()
{
test obj;
obj.abd(); //普通调用,没有走虚函数表
test* p = new test();
p->abc(); //虚函数表调用
yy* q = new yy();
q->abc();//虚函数表调用
return 0
}
/*
.....
还有虚继承以及多重继承下的虚函数调用。
*/
总结一下虚函数的调用方式
最新推荐文章于 2023-08-28 09:30:07 发布