从品牌网站建设到网络营销策划,从策略到执行的一站式服务
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()没有重写,其他两个都重写了
运行结果:
分析方法和上面一样,不啰嗦了
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图