本文主要是介绍Glass Scienttan,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
该函数的地址也将被添加到vtbl中(参见图13.5)。注意,无论类中包含的虚函数是1个还是10个,都只
需要在对象中添加1个地址成员,只是表的大小不同而已。
Glass Scienttan
chat tase|4917
wirtaal told sb naelh
irtaal vabd shen _* 1c1:
class Pysbciat : pablio Scientist
ar (saldi4:
vedd shoe allh: Ti redefssea
wartanl vaie shon fietel; rr m
AM
4264
6429
草函数表
业函数表
没有票新组文的函数,重新尼文的函数
Sopbde Fant
Adam Crusher
2096
auclear structure
(新函数)
Seienfist对象具有图藏指計
成及yptr,指料Saiontiai虚
活数表。
Physiciat对家具有:
湖雞指针成员知江,指科
Physicist版函数社
1存找pscSwptr的值:2006.
2.31达2096.
5.寻我表中第2个函数的地址:6820。
4.到达地肚处(6820),执行惠退的函数。
图13.5 虚函数机制
调用虚函数时,程序将查看存储在对象中的vtbl地址,然后转向相应的函数地址表。如果使用类声明
中定义的第一个虚函数,则程序将使用数组中的第一个函数地址,并执行具有该地址的函数。如果使用类
声明中的第三个虚函数,程序将使用地址为数组中第三个元素的函数。
简而言之,使用虚函数时,在内存和执行速度方面有一定的成本,包括:
● 每个对象都将增大,增大量为存储地址的空间。
● 对每个类,编译器都创建一个虚函数地址表(数组)。
● 每个函数调用都需要执行一步额外的操作,即到表中查找地址。
虽然非虚函数的效率比虚函数稍高,但不具备动态联编功能。
13.4.5 有关虚函数注意事项
我们已经讨论了虚函数的一些要点:
● 在基类方法的声明中使用关键字 virtual可使该方法在基类以及所有的派生类(包括从派生类派生
出来的类)中是虚拟的。
● 如果使用指向对象的引用或指针来谓用虚方法,程序将使用为对象类型定义的方法,而不使用为
引用或指针类型定义的方法。这称为动态联编或晚期联编。这种行为非常重要,因为这样基类指
针或引用可以指向派生类对象。
● 如果定义的类将被用作基类,则应将那些要在派生类中重新定义的类方法声明为虚拟的。
对于虚方法,还需要了解其他一些知识,其中有的已经介绍过。下面我们来看一下这些内容。
这篇关于Glass Scienttan的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!