C++ 的多态(Polymorphism), virtual function

多态

c++支持两种多态,编译时多态和运行时多态
但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,overload。

“如果不是晚实现的多态,则根本不是多态”。
运行时多态才是正儿八经的多态, 通过override实现。
前掉是函数一定要有virtual, 有virtual才能override.
有virtual才能实现多态。
需要Clarify一点, 当你写了virtual的时候,并不代表子类一定需要override它。
子类不写的话就调用base的virtual function就行了。
Java里面没有virtual这个鬼东西。所以上来很蒙。

那么问题来了?
如果不写Virtual会是什么情况呢? 如果这时我在子类和父类里面各定义了两个相同的函数?
这时如果你在子类里面写override 关键字是会报错的。因为不是virtual 函数所以不能override。
这时如果建了一个子类。
拿着子类的pointer去call这个函数,会调用子类的函数。
拿着父类的pointer去call同一个对像的函数,会调用父类的函数。
这就没法实现多态了。

https://stackoverflow.com/questions/11067975/overriding-non-virtual-methods

虚函数 virtual function

可以被子类重新定义的函数。
注意你如果没写virtual, 就没法实现多态!
有的虚函数在父类没有意义,干脆就不写,所有子类必须要重新定义。这种叫做纯虚函数。
用 =0 来表示。

你可能感兴趣的:(C++ 的多态(Polymorphism), virtual function)