C++ 三大属性之多态

一、什么是多态

多态性就是不同对象收到相同消息,产生不同的行为。可以用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。

二、多态的种类

静态联编支持的多态性称为编译时多态性(静态多态性)。在C++中,编译时多态性是通过函数重载和模板实现的。利用函数重载机制,在调用同名函数时,编译系统会根据实参的具体情况确定索要调用的是哪个函数。

动态联编所支持的多态性称为运行时多态(动态多态)。在C++中,运行时多态性是通过虚函数来实现的。

编译时和运行时具体过程可参考:https://www.cnblogs.com/AntonioSu/p/12196525.html

三、什么是虚函数

主要是为了实现动态多态而设计。用virtual关键字申明的函数叫做虚函数。

虚函数的重写:派生类中有一个跟基类的完全相同的虚函数,我们就称子类的虚函数重写了基类的虚函数。“完全相同”是指:函数名、参数、返回值都相同。

四、代码示例

动态多态的实现

#include <iostream>
using namespace std;
class Person
{
public:
    virtual void show() { cout << "I am person" << endl; }
};
class Student : public Person
{
public:
    virtual void show() { cout << "I am student" << endl; }
};
class Teacher : public Person
{
public:
    virtual void show() { cout << "I am teacher" << endl; }
};
class Bachelor : public Student
{
    virtual void show() { cout << "I am bachelor" << endl; }
};
int main(){
    Person  person;
    Student student;
    Teacher teacher;
    Bachelor bachelor;

    Person *one = &person;//指向person
    one->show();    // I am person 。多态,person.show()被调用
    one = &student;        //基类指针one指向派生类对象student
    one->show();  //I am student 。多态,student.show()被调用
    one = &teacher;       //基类指针one指向派生类对象teacher
    one->show();  //I am teacher 。多态,teacher.show()被调用
    one = &bachelor;       //基类指针one指向派生类对象bachelor
    one->show();  //I am bachelor 。多态,bachelor.show()被调用
    return 0;
}

原文链接: https://www.cnblogs.com/AntonioSu/p/12196623.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/191965

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午5:53
下一篇 2023年2月12日 下午5:53

相关推荐