zoukankan      html  css  js  c++  java
  • C++ 虚函数

    • 虚函数注意事项
      • 只需在虚函数的声明处加上virtual关键字,函数定义处可以加也可以不加

      • 可以只将基类中的函数声明为虚函数,这样派生类中具有遮蔽关系的同名函数都将自动成为虚函数。

      • 当基类中定义了虚函数,如果派生类没有定义新的函数来遮蔽此函数,那么将使用基类的虚函数。

      • 构造函数不能是虚函数。对于基类的构造函数,它仅仅是在派生类构造函数中被调用,这种机制不同于继承。

      • 析构函数可以声明为虚函数,而且有时候必须声明为虚函数。

        /*当基类中定义了虚函数,如果派生类没有定义新的函数来遮蔽此函数,那么将使用基类的虚函数。*/
        
        #include <iostream>
        using namespace std;
        //基类People
        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;
        }
        //派生类Teacher
        class Teacher: public People{
        public:
            Teacher(char *name, int age, int salary);
            virtual 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;
        }
        

    /运行结果:/
    王志刚今年23岁了,是个无业游民。
    赵宏佳今年45岁了,是个无业游民。

    
    - 构成多态的条件
        - 继承:必须存在继承关系
        - 重写:子类重写了父类的方法
        - 指针:存在基类的指针,通过改指针调用虚函数
  • 相关阅读:
    oracle安装
    Jmeter入门篇
    DOS常用命令
    SpringBoot中使用JNnit4(一)之Mockito的使用
    SpringBoot中使用JNnit4(入门篇)
    SpringBoot搭建
    SpringBoot中集成Swagger2
    jpa使用过程中出现问题记录[持续更新]
    Python逆向(五)—— Python字节码解读
    Python逆向(四)—— Python内置模块dis.py源码详解
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12333980.html
Copyright © 2011-2022 走看看