用一段代码展示成员函数的重写和重载,以及对象的多态特性
#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