C++:成员函数的重写、重载以及多态
2018-02-01 17:03
387 查看
用一段代码展示成员函数的重写和重载,以及对象的多态特性
特别是输出中,base指针指向继承类的对象时,调用OverRide函数,则执行的是base类的成员函数,这是函数重写的定义;base指针调用virtual函数,执行的是derived类的成员函数,这是多态的定义;
以下是输出:
function overload:
child.OverLoadFunc(1) ChildB func OverLoadFunc(int): 1
child.OverLoadFunc(1.0f) ChildB func OverLoadFunc(float): 1
function override:
child.OverRideFunc()ChildB func OverRideFunc
base.OverRideFunc() BaseA func OverRideFunc
basePtr->OverRideFunc() BaseA func OverRideFunc
ploymorphic:
basePtr->PolymorphicFunc() ChildB func PolymorphicFunc
child.PolymorphicFunc() ChildB func PolymorphicFunc
base.PolymorphicFunc() BaseA func PolymorphicFunc
#include <iostream> using namespace std; class BaseA{ public: void OverRideFunc() { cout << "BaseA func OverRideFunc" << endl;} virtual void PolymorphicFunc() { cout << "BaseA func PolymorphicFunc" << endl;} }; class ChildB: public BaseA{ public: void OverRideFunc() { cout << "ChildB func OverRideFunc" << endl;} void OverLoadFunc(int num) { cout << "ChildB func OverLoadFunc(int): " << num << endl; } void OverLoadFunc(float num) { cout << "ChildB func OverLoadFunc(float): " << num << endl; } virtual void PolymorphicFunc() { cout << "ChildB func PolymorphicFunc" << endl;} }; int main() { ChildB child; BaseA base; BaseA *basePtr = &child; cout << "function overload: " << endl; cout << " child.OverLoadFunc(1) "; child.OverLoadFunc(1); cout << " child.OverLoadFunc(1.0f) "; child.OverLoadFunc(1.0f); cout << "function override: " << endl; cout << " child.OverRideFunc()"; child.OverRideFunc(); cout << " base.OverRideFunc() "; base.OverRideFunc(); cout << " basePtr->OverRideFunc() "; basePtr->OverRideFunc(); cout << "ploymorphic: " << endl; cout << " basePtr->PolymorphicFunc() "; basePtr->PolymorphicFunc(); cout << " child.PolymorphicFunc() "; child.PolymorphicFunc(); cout << " base.PolymorphicFunc() "; base.PolymorphicFunc(); return 0; }
特别是输出中,base指针指向继承类的对象时,调用OverRide函数,则执行的是base类的成员函数,这是函数重写的定义;base指针调用virtual函数,执行的是derived类的成员函数,这是多态的定义;
以下是输出:
function overload:
child.OverLoadFunc(1) ChildB func OverLoadFunc(int): 1
child.OverLoadFunc(1.0f) ChildB func OverLoadFunc(float): 1
function override:
child.OverRideFunc()ChildB func OverRideFunc
base.OverRideFunc() BaseA func OverRideFunc
basePtr->OverRideFunc() BaseA func OverRideFunc
ploymorphic:
basePtr->PolymorphicFunc() ChildB func PolymorphicFunc
child.PolymorphicFunc() ChildB func PolymorphicFunc
base.PolymorphicFunc() BaseA func PolymorphicFunc
相关文章推荐
- 详解C++中的函数调用和下标以及成员访问运算符的重载
- C++ 类的多态二(函数重载--函数重写--函数重定义)
- C++和Java在 子类继承父类时,两者成员函数重写和重载的特性
- 父子类之间,成员函数重写、重载以及重定义的区别
- 详解C++中的函数调用和下标以及成员访问运算符的重载
- C++成员函数重载、覆盖(重写)和隐藏
- c++中多态函数以及函数重载,覆盖,遮蔽(隐藏)的区别
- C++父类子类间函数重定义,虚函数重写(覆盖)以及重载
- C++ 类成员函数重载(overload), 覆盖、重写(overrider), 隐藏(hidden)
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- C++和Java在 子类继承父类时,两者成员函数重写和重载的特性
- c++中多态函数以及函数重载,覆盖,遮蔽(隐藏)的区别
- C++ 类成员函数的重载(overload),重写/覆盖(override),隐藏
- [C++基础]重载、覆盖、多态与函数隐藏(1)
- C++函数名字的隐藏:重写、重载、重定义
- C++成员函数的重载、覆盖与隐藏22
- C++运算符重载(成员函数以及友元函数实现)
- C++精进篇(八)之―函数重定义、重载、重写
- C++中的虚函数,多态,覆盖隐藏重载