C++ 动态多态的使用方法,及两个必要条件

多态

C++中的动态多态机制,允许程序员使用某个或某些派生类的父类类型的指针或引用,来操作这些派生类的类型对象,而且会根据实际对象的类型来调用该类型中对应的类方法。这可以让C++的程序设计变得更加灵活,且代码可高度重用。

通俗理解方式

每个人都有名字,但往往是不同的。

该怎么理解呢?举个例子,在班级中轮流自我介绍的时候,老师在台上制定了规则,比如按第一组的第一排开始,然后向后按顺序进行自我介绍。该过程中,老师制定的规则,就好像父类类型的指针操作派生类(学生)的对象,而这些学生则会根据自身名字来进行介绍,内容往往是不同的,比如小明、小强、小美等等。

多态语法

C++的多态一般可以分为两类,一个是动态多态——使用类和虚函数;另一个则是静态多态——使用模板和函数重载(这个将在介绍C++模板的时候再进行详细地介绍)。动态多态的两个组成部分

  • 派生类;
  • 虚函数:基类中使用virtual关键字修饰的成员函数;

派生类中重写基类虚函数的注意点

  • 派生类中重写基类虚函数时,不需要使用virtual修饰,且与函数重载不同,可以不要求参数、返回值等方面保持不同;
  • 可以使用override 关键字显式地指定该派生类的成员函数是重写了基类中的虚函数;

strong>重点提示:具体的语法可参考下方的实例代码。

多态的调用方式

可以使用父类的指针或引用调用子类中重写的虚函数,该过程也被称为动态绑定或后期绑定。

动态多态实例代码

如下实例,定义了一个Student类,并派生了两个子类,小明和小强,并通过Student类的指针来调用子类中重载的introduce成员函数:

#include <iostream>
using namespace std;

class Student{
    public:
        string name;
        // 通过virtual关键字定义虚函数
        virtual void introduce(){
            cout <<"我叫:"<< this->name;
        }
        
};

class Xiaoming:public Student{
    public:
    // 重写虚函数,并使用override显式声明
    void introduce() override{
        cout <<"我叫:"<< this->name <<" 今年15岁"<< endl;
    }

};

class Xiaoqiang:public Student{
    public:
        void introduce() override{
            cout <<"我叫:"<< this->name <<" 兴趣是:打篮球" << endl;
        }
};


int main(){

    Xiaoming xm;
    xm.name = "小明";
    Xiaoqiang xq;
    xq.name = "小强";
    // 定义基类的指针
    Student *stu = &xm;
    stu->introduce();
    stu = &xq;
    stu->introduce();

    return 0;
}

代码运行后,得到输出值为:

我叫:小明 今年15岁
我叫:小强 兴趣是:打篮球

免责声明:内容仅供参考,不保证正确性。


全栈后端 / C++教程 :
















Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.