调用哪个虚函数的问题
2010-08-09 20:24
162 查看
#include<iostream>
#include<string>
usingnamespacestd;
classA{
public:
voidvirtualf()
{
cout<<"A"<<endl;
}
};
classB:publicA{
public:
voidvirtualf(){
cout<<"B"<<endl;
}
};
intmain()
{
A*pa=newA();
pa->f();
B*pb=(B*)pa;
pb->f();
deletepa,pb;
pa=newB();
pa->f();
pb=(B*)pa;
pb->f();
getchar();
return0;
}
.codearea{color:black;background-color:white;line-height:18px;border:1pxsolid#4f81bd;margin:0;width:auto!important;width:100%;overflow:auto;text-align:left;font-size:12px;font-family:"CourierNew","Consolas","Fixedsys","BitStreamVeraSansMono",courier,monospace,serif}
.codeareapre{color:black;line-height:18px;padding:00012px!important;margin:0em;background-color:#fff!important}
.linewrappre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;word-break:normal}
.codeareapre.alt{background-color:#f7f7ff!important}
.codearea.lnum{color:#4f81bd;line-height:18px}
运行结果:
分析:
1)虚函数是占用空间的,含有1个虚函数的类的对象,其内部有一个虚函数指针,所以其sizeof大小为各个成员变量大小之和,在加上虚函数指针的大小(一般为4B,32位机器)。
2)当通过基类指针或子类指针调用虚函数的时候,都是通过该指针当前指向的对象中的虚函数指针来调用合适的虚函数。所以,无论该指针为基类类型、子类类型,调用哪个虚函数都取决于其所指向的对象的类型(实际依赖对象中的虚函数指针)。
3)通过类对象调用虚函数,理所当然调用的是该对象类类型的虚函数。
#include<iostream>
#include<string>
usingnamespacestd;
classA{
public:
intval;
A(inti=1):val(i){};
intvirtualf()
{
returnval;
}
};
classB:publicA{
public:
intval;
B(inti=2):val(i){};
};
intmain()
{
Bb;
cout<<b.f()<<endl;
getchar();
return0;
}
结果为1。
相关文章推荐
- 解决:对 PInvoke 函数的调用导致堆栈不对称问题
- SQL SERVER树型数据处理时,函数递归调用问题,查询根节点,子节点函数
- 分析C++方式构造函数调用虚函数的问题
- 请指教:prototype.js ajax里面onSuccess 里面调用 公有成员函数的问题
- net中前台javascript与后台c#函数相互调用问题
- 关于,函数调用是传值调用,初始化函数中重新分配内存,导致形参的值和实参的值不一致 问题分析
- C++中 构造函数 析构函数 能否调用虚函数的问题
- 深析静态链接库和动态链接库相同函数覆盖及库调用顺序问题
- 浅谈C++中内存分配、函数调用和返回值问题
- c++ 多态问题(在虚函数里调用虚函数)
- C/C++中函数的传值调用、指针调用、引用调用问题
- ...后台代码中如何调用 javascript 函数的问题! - ASP.NET专题(按钮事件中调用JS文件中函数)
- 关于函数调用的loop的一个问题
- 深析静态链接库和动态链接库相同函数覆盖及库调用顺序问题
- PHP中exec、system等函数调用linux命令问题
- 在C++中调用C写的函数(使用lex_yacc遇到的问题)
- 由反序列化二叉树实现函数引起的二叉树节点递归调用问题
- 数组原型方法调用及函数apply调用时 类数组参数在IE8下的问题
- 对 PInvoke 函数的调用导致堆栈不对称问题
- 解决:对 PInvoke 函数的调用导致堆栈不对称问题