通过对象使用方法时
派生类中未重新定义基类同名函数时:
派生类对象将使用基类的方法。
派生类中重新定义了基类同名函数时:
派生类对象将使用派生类的方法,此时可通过基类作用域运算符使用基类方法。
注释:
首先可以在派生类中重新定义基类的方法(通常称为函数的隐藏),实际应用中,派生类覆盖基类的成员函数,会引起在派生类对象中隐藏了基类的同名函数(即派生类对象无法直接调用基类的同名函数),同时可以在派生类的函数中通过基类的作用域运算符调用基类的隐藏函数。
通过对象指针使用方法时
如果基类方法前面不加virtual:
将以指针的类型决定调用对应类的方法。
注释:
基类的指针可以在不进行显式类型转换的情况下指向派生类的对象,基类的引用可以在不进行显式类型转换的情况下引用派生类的对象。但是基类指针或者引用只能调用基类方法,不能调用派生类的方法。类的派生过程中,为使派生类的对象和基类的对象的同名方法能够实现不同的操作行为,即称为继承中的多态性,即同一个方法的行为会依据上下文内容确定。如果使用指针或者引用调用对象,那么程序将根据引用或者指针的类型,而不是对象的类型选择成员函数(基类指针可以指向基类对象或者派生类对象)。
如果基类方法前加virtual:
将以对象的类型选择对应的成员函数。
注释:
为了实现以对象为标准选择成员函数,需要使用虚方法。