您的位置:首页 > 编程语言 > C语言/C++

C++:成员函数的重写、重载以及多态

2018-02-01 17:03 387 查看
用一段代码展示成员函数的重写和重载,以及对象的多态特性

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息