zoukankan      html  css  js  c++  java
  • C++基础--重载、重写、隐藏

    1、重载(overload)

    重载的概念是在同一作用域内函数名相同,函数输入参数个数、数据类型不同,但是不能是函数名、参数个数、数据类型完全相同但返回值不同的情况。最直接的例子是常见的构造函数重载,在写一个类的时候可能会出现多个构造函数,每个构造函数的输入参数是不一样的,有无输入参数的默认构造函数,也有带参的构造函数。

    所以,重载的特点总结为:

    • 在同一作用域(比如同一类中的成员函数);

    • 函数名相同;

    • 参数列表不同(参数个数或者参数数据类型)

    • virtual关键字可有可无。

    2、重写(overrid)

    重写也叫覆盖,重写要求子类继承父类的virtual修饰的方法并重写函数定义,这个一般情况都要求函数名返回值参数列表必须完全相同。关于返回值,可以是这几种情况:

    • 与基类的虚函数有相同的返回类型;

    • 或者与基类虚函数的相同;

    • 或者都返回指针(或引用),并且派生类虚函数所返回的指针(或引用)类型是基类中被替换的虚函数所返回的指针(或引用)类型的子类型(派生类型)。

    所以,重写的特点可以归纳为:

    • 不同作用域(子类和父类);

    • 函数完全一样(一样的函数名、返回值和参数列表);

    • 父类的函数声明必须用virtual修饰;

    关于重写还有个可能不太一般的情况,就是子类重写了父类虚函数,函数名和参数列表都一样,但是返回值不一样,比如父类返回的是父类的指针或者引用,子类返回的是子类的指针或者引用,这个情况叫协变,这个也属于重写。

    3、隐藏(hide, oversee)

    隐藏跟重载和重写有点混淆,但是不一样。隐藏是子类与将父类的成员函数同名,将父类的成员函数屏蔽,出现屏蔽的条件是:

    • 子类和父类函数的参数列表相同,但是父类的成员函数没有virtual修饰(这个对比重写);

    • 子类和父类函数的参数列表不同,这时不管父类的函数是不是虚函数都屏蔽(这个对比重载);

    关于重写涉及到一个虚函数的概念,这一篇不讲,下一篇再介绍。

    悲歌可以当泣,

    远望可以当归。

    思念故乡,

    郁郁累累。

    欲归家无人,

    欲渡河无船。

    心思不能言,

    肠中车轮转。

    上善若水,为而不争。
  • 相关阅读:
    django目录
    django之form表单验证
    django操作数据库之查询F,Q操作 和 seach搜索功能
    django的序列化
    三目运算
    【转】做有生命力的接口测试
    【转】浅谈反应测试
    【转】jmeter 进行java request测试
    【转】探索式测试:基本概念
    【转】 测试职业思考:如何成为一名优秀的软件测试工程师
  • 原文地址:https://www.cnblogs.com/Bearoom/p/11721760.html
Copyright © 2011-2022 走看看