zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    mysql 分库分表
    策略模式
    JAVA NIO 选择器
    有关于web server架构的一个小疑问
    Android 吸入动画效果详解
    android中设置TextView/Button 走马灯效果
    浅谈Jquery的使用上篇
    ORA-00376:file x cannot be read at this time
    用VBA宏从一个工作薄复制内容到另一个工作薄
    ovirt node的安装简介
  • 原文地址:https://www.cnblogs.com/AntonioSu/p/12196623.html
Copyright © 2011-2022 走看看