• C++多态与虚函数


    C++多态与虚函数

    面向对象程序设计语言有封装、继承和多态三种机制,这三种机制能够有效提高程序的可读性、可扩充性和可重用性。

    “多态(polymorphism)”指的是同一名字的事物可以完成不同的功能。多态可以分为编译时的多态和运行时的多态

    函数的重载,对重载函数的调用,在编译时就能根据实参确定应该调用哪个函数,因此叫编译时的多态;后者则和继承、虚函数等概念是指运行时的多态。

    #include <iostream>
    using namespace std;
    class People{
    public:
        People(char *name, int age);
        void display();
    protected:
        char *m_name;
        int m_age;
    };
    People::People(char *name, int age): m_name(name), m_age(age){}
    void People::display(){
        cout<<m_name<<"今年"<<m_age<<"岁了,是个无业游民。"<<endl;
    }
    //派生类Teacher
    class Teacher: public People{
    public:
        Teacher(char *name, int age, int salary);
        void display();
    private:
        int m_salary;
    };
    Teacher::Teacher(char *name, int age, int salary): People(name, age), m_salary(salary){}
    void Teacher::display(){
        cout<<m_name<<"今年"<<m_age<<"岁了,是一名教师,每月有"<<m_salary<<"元的收入。"<<endl;
    }
    
    int main(){
        People *p = new People("王志刚", 23);
        p -> display();
        p = new Teacher("赵宏佳", 45, 8200);
        p -> display();
        return 0;
    }
    

    通过基类指针只能访问派生类的成员变量,但是不能访问派生类的成员函数.

    让基类指针能够访问派生类的成员函数,C++ 增加了虚函数(Virtual Function)。使用虚函数非常简单,只需要在函数声明前面增加 virtual 关键字。

    #include <iostream>
    using namespace std;
    
    class People{
    public:
        People(char *name, int age);
        virtual void display();  //声明为虚函数
    protected:
        char *m_name;
        int m_age;
    };
    
    People::People(char *name, int age): m_name(name), m_age(age){}
    void People::display(){
        cout<<m_name<<"今年"<<m_age<<"岁了,是个无业游民。"<<endl;
    }
    
    
  • 相关阅读:
    c/c++生成预编译文件
    (转)vim 访问系统剪贴板
    vim 使用、设置笔记
    使用cygwin注意事项二
    (转)使用cygwin注意事项一
    cygwin Could not create directory '/home/Administrator/.ssh'
    Linux 学习笔记 文件权限
    Linux 学习笔记 Linux环境变量初稿
    Linux 学习笔记 更多的bash shell命令
    Linux 学习笔记 查看文件内容诸多命令
  • 原文地址:https://www.cnblogs.com/Zak-NoS/p/11673911.html
Copyright © 2020-2023  润新知