• C++虚函数


    一、虚函数概述

    虚函数应用于类的继承中。基类中定义的成员函数,如果在派生类中不做改变直接继承,则定义成非虚函数,如果需要在派生类中重载(override),则要定义成虚函数。

    当我们使用指针或者引用调用虚函数时,该调用将会被动态绑定,即根据引用或指针所绑定的对象类型不同,该调用可能执行基类的版本,也有可能执行某个派生类的版本。

    二、定义方式

    在函数前边加上关键字 virtual ,virtual 只能用于类内部的成员函数的定义而不能用于类外部的函数定义,虚函数的解析发生在运行时而不是编译时。

    1 class Quote
    2 {
    3 public :
    4            std :: string isbn () const;
    5            virual double net_price(std :: size_t n) const;// 虚函数
    6 }

    三、相关知识

    1、派生类不一定非要重载基类的虚函数(primer P530),如果派生类没有继承基类中的某个虚函数,这个虚函数像其他普通函数一样,派生类直接继承基类中的版本。

    2、虚函数在派生类中有三种声明方式:

          1)在函数声明后加上override关键字(推荐)

          2)在函数声明前加上 virtual 关键字

          3)什么也不加,某个函数一旦在基类中声明为虚函数,则在所有派生类中都是虚函数

    基类与派生类的函数名、返回类型、形参列表必须完全一致。唯一例外是返回类型是类本身的指针或引用时。

    3、动态绑定只有传入虚函数的参数为指针或者引用时才会发生,如果用普通类型调用虚函数,编译时便可确定其类型。

    4、只有虚函数才能被重载。某个虚函数被声明为 final ,则不能再被重载。final加载声明最后。

    5、回避虚函数机制。有时希望对虚函数的调用不进行动态绑定,而是执行虚函数的某个版本,这时用类作用域运算符  类名 ::

    6、纯虚函数:在函数最后加上 =0  表示一个虚函数为纯虚函数,包含纯虚函数的类是抽象基类,抽象基类不能定义对象。也可以为纯虚函数提供定义不过不能在类内定义,只能在类外。

  • 相关阅读:
    GO语言网络编程
    GO语言测试
    GO语言反射
    GO语言strconv包的使用
    GO语言并发
    Centos7 开启swap分区
    设计模式 之 命令模式
    设计模式 之 代理模式
    设计模式 之 工厂模式
    设计模式 之 观察者模式
  • 原文地址:https://www.cnblogs.com/hustsss/p/11193348.html
Copyright © 2020-2023  润新知