细谈C++多态性的“动”与“静”

细谈C++多态性的“动”与“静”,第1张

细谈C++多态性的“动”与“静”,第2张

在讨论多态性的时候,我们先来看看什么是硬编码和软编码:硬编码就是把代码写死,导致弹性不足,降低可伸缩性,比如
if...其他...在代码中;转换...情况...

这些代码通常是硬编码的。一个项目中代码多了,就相当于这个代码的灵活性、扩展性、弹性等等信息少了。

所以要尽量使用软编码。通俗点就是“别说死话,留点余地”。多态性就是这种软编码特征的反映。我们一起来研究多态性。

多态是一种抽象,把事物的特征抽象出来,然后我们就不关心事物的具体形态了。

比如对于一个工人来说,他的特点就是工作。至于他是什么样的工人,做什么样的工作,我们不必关心,只要我们称之为“工人”。工作”。然后他会为我们工作。

那我们为什么不抽象其他特性,只工作?因为我们只对这个特征感兴趣,所以不关心他吃饭睡觉上厕所的特征。有了多态性,就可以实现软编码了!

解释完多态的概念,我们再来看看多态的实现(C++的实现):

多态是通过虚函数表(VTable)实现的。如果每个类都有一个虚函数,那么它就有一个虚函数表,所有的对象都共享这个虚函数表。这个概念也叫动态绑定,还有静态绑定。这些概念是由程序执行时的性质决定的。我们来看看它的“动”和“静”到底体现在哪里。

先看一段代码:

C0等级
...{
public:
void Test()
...{
cout Test();
其反汇编代码如下:

//直接调用函数(地址已经知道)
00401432MOVECX,DWORD PTR[EBP-0CH]
00401435 Call @ ILT+160(C0::Test)(004010 a5)
我们来看看假想的波段。

class C1
...{
public:
virtual void Test()
...{
cout

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 细谈C++多态性的“动”与“静”

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情