多态:如何判断一个成员函数是否为虚函数(即函数的重写或覆盖)

多态概念:同一种事物的多种表现形式,分为静态多态和动态多态。
一. 静态多态是编译时体现的,像函数重载,泛型编程。

函数重载:

  1. 作用域相同。
  2. 几个函数功能类似并且函数名相同。
  3. 参数不相同(参数类型,个数或顺序的不同)。
  4. 根据调用时函数的参数,知道调用哪个函数。

二. 动态多态,运行时体现的,必须满足两个条件:

  1. 虚函数
    判断一个成员函数是不是虚函数(重写),有两个三个条件:
    1). 两个成员函数各自在基类和派生类中定义;
    2). 基类中定义的成员函数必须带有关键字virtual,派生类的成员函数可带可不带。
    3). 这两个成员函数原型(函数名,函数参数,函数返回类型)必须相同。

注意:如果这两个函数的返回类型分别为基类和派生类,返回值为指向基类和派生类的指针或引用,则也构成重写。此返回类型称为协变

2.调用对象的虚函数时,使用对象指针或引用,这样当指针指向不同的对象时,就可以调用不同类的成员函数,从而体现多态性。

下面给一个程序分析:

#include<iostream>
using namespace std;

class Grandam
{
public:
    virtual void introduce_self()
    {
        cout << "I am grandam." << endl;
    }
};

class Mother:public Grandam
{
public:
    void introdude_self()
    {
        cout << "I am mother." << endl;
    }
};

class Daughter :public Mother
{
public:
    void introduce_self()
    {
        cout << "I am daughter." << endl;
    }
};

int main()
{
    Grandam* ptr;
    Grandam g;
    Mother m;
    Daughter d;
    ptr = &g;
    ptr->introduce_self();

    ptr = &m;
    ptr->introduce_self();

    ptr = &d;
    ptr->introduce_self();
    return 0;
}

结果如图所示:

这里写图片描述

从结果可知,每次都执行了对象的虚函数introduce_self()版本,体现了运行时的多态。

猜你喜欢

转载自blog.csdn.net/lxp_mujinhuakai/article/details/69399959