在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.有些奇怪的多态来,先上代码,我们从两段要表述多态性质的代码来看看,奇怪在什么地方。
上面是两个继承关系的类定义。penguin(企鹅)类继承了bird类。在bird类之中fly()函数是一个virtual函数,它可以被penguin覆盖。我们看看正确的多态代码应该怎么编写:
编译器通过指针的内容,而不是它的类型,来判断应该调用的函数。因此,由于 penguin的对象的地址存储在bird指针中,所以会调用对应的fly()函数。 啊哈,这一些看起来都很完美。但是熟悉Java和Python的程序员应该会和我一样写出类似于下面的代码吧:
FxxK,这还是不是我熟悉的多态?为什么输出的内容和我想象的不一样。不行,我得再试一试其他方法。
2.出了什么问题呢?好吧,上面两段代码我想会让很多Java或Python的程序员深感困惑,看起来C++和我们熟悉的语言想去甚远。其实,这就回到我们今天要聊的主题,接下来我们一一来分析上两段代码:
其实这段代码最核心的点是弄明白bird b = p语句中的=操作符真正代表的含义。 为了解释这个=操作符,我们继续看下面这段代码。
有木有很神奇,让我们困惑的问题迎刃而解,只不过添加了一个&操作符。
好了,解释完上一段代码之后,我们继续看第二段代码。
这里为什么我们强制类型转换之后,还是没法输出我们想要的结果呢?那是因为 除了指针与引用类型,C++编译器在编译阶段通过类型静态确定调用函数的地址。 3.其他语言的困惑的解析
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论