网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

类中含有虚函数的剖析

1. 源代码

目前成都创新互联已为成百上千的企业提供了网站建设、域名、网站空间网站托管运营、企业网站设计、阜城网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

#include

using namespace std;

class Base

{

public :

virtual void  FunTest()

{

cout << "Base::FunTest () " << this << endl;

}

virtual void  FunTest1()

{

cout << "Base::FunTest1 () " << this << endl;

}

virtual void  FunTest2()

{

cout << "Base::FunTest2 () " << this << endl;

}

};

class Der : public Base

{

public:

virtual void  FunTest1()

{

cout << "Der::FunTest1 () " << this << endl;

}

virtual void  FunTest2()

{

cout << "Der::FunTest2 () " << this << endl;

}

};

void Test()

{

Base b;

Der  d;

Base *pb = &b;

pb->FunTest();

pb->FunTest1();

pb->FunTest2();

}

int main()

{

Test();

getchar();

return 0;

}

运行后的结果 :

类中含有虚函数的剖析

先来看看Base类创建的对象有多大

类中含有虚函数的剖析

然而用sizeof(b)时结果却为4 ,这是什么情况

用监视可以看到在取地址d,下面放的是一个地址,而我们知道地址就是4个字节的大小(见内存1)

其实这个地址有名字的叫做虚表地址

但是这个地址下有存储些什么东西(见内存2)

类中含有虚函数的剖析

可以清晰的看到这貌似像一个表里面存储的是在Base类那些虚函数的地址,其实它叫虚表

2.pb->FunTest();这一句是如何实现的,那就要看看编译器做了些什么了

类中含有虚函数的剖析

在第三步中,语言有点欠缺,就是并不是直接将eax中内容直接给 eax,又是会根据在虚表中存储的位置有所变动,

4.还有一种情况就是Base类的指针指向派生类Der的对象时,是什么情况,

源码变动:

void Test()

{

Base b;

Der  d;

Base *pb = &b;

pb->FunTest();

pb->FunTest1();

pb->FunTest2();

}

看好了,派生类中只是对基类的虚函数FunTest()没有重写,其他两个都重写了

运行结果:

类中含有虚函数的剖析

分析方法和上面一样,不啰嗦了

类中含有虚函数的剖析


当前名称:类中含有虚函数的剖析
网页路径:http://bjjierui.cn/article/gjiihs.html

其他资讯