派生类可以重新定义具有不同签名的函数的虚函数吗?

梦之风

Microsoft文档页面之一中给出了一些奇怪的示例,该示例页面由两个类组成,一个是基类,另一个是派生类。基类具有以下虚拟函数成员:

virtual void setEars(string type)      // virtual function
{
    _earType = type;
}

另一个在派生类中定义,如注释所述,它重新定义了虚函数:

// virtual function redefined
void setEars(string length, string type)
{
    _earLength = length;
    _earType = type;
}

这两个具有不同的签名,我还从未听说过您是否真的可以用另一个签名的函数来重新定义虚拟函数。我编译了此示例,可以发现这两个示例之间的所有替代行为。样本只是令人误解还是我遗漏了一些东西?

乔多克

样本只是令人误解还是我遗漏了一些东西?

这个例子确实令人误解。在派生类型中覆盖虚拟函数时,它必须具有与基类中定义的相同的签名。如果不是这种情况,则子类中的函数将被视为其自己的实体,并且在多态函数调用中不会被考虑。另外,它会隐藏基类函数的名称,这被认为是不好的做法,因为它违反了公共继承中的“ is-a”关系。

为了防止此类意外隐藏,C ++引入了override关键字。覆盖虚拟函数时,它必须具有匹配的签名,否则,编译器将拒绝它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何调用在C ++中具有抽象基类和派生类的定义的基类的虚函数定义?

来自分类Dev

派生类的虚函数调用基类的虚函数

来自分类Dev

C ++:用指向派生类的指针进行的虚函数调用是否仍具有vlookup

来自分类Dev

为什么具有虚函数的类与没有虚函数的类对齐方式不同?

来自分类Dev

如何使虚函数接受仅在派生类中定义的数据类型?

来自分类Dev

重新定义派生类中的静态成员。爪哇

来自分类Dev

通过基类虚函数获取派生类型

来自分类Dev

为什么派生类中的虚函数也虚拟?

来自分类Dev

带虚函数的C++派生类

来自分类Dev

如何定义以派生类型为参数的虚函数?

来自分类Dev

可以重新定义constexpr和内联函数吗?

来自分类Dev

使用可变参数函数覆盖具有不同函数签名的虚函数

来自分类Dev

在派生的模板类中从基类重新实现虚函数

来自分类Dev

派生类可以访问基类的构造函数和析构函数吗?

来自分类Dev

C ++多态性-调用具有不同签名的派生类方法

来自分类Dev

来自派生类的调用函数,该派生类存储在具有基类类型的Map中

来自分类Dev

当派生类中的函数无法覆盖基类中的虚函数时发出警告

来自分类Dev

有没有办法阻止派生类进一步实现虚函数?

来自分类Dev

具有纯虚函数实现的类

来自分类Dev

类有虚函数吗?C ++

来自分类Dev

纯虚函数可以有参数吗?

来自分类Dev

C ++将派生类存储在单个向量中,而派生类不包含重新定义的方法

来自分类Dev

可以像使用静态类函数那样使用派生类吗?

来自分类Dev

C++ 可以根据给单个构造函数的参数创建派生类而不是bass 类吗?

来自分类Dev

在C ++中从派生类的析构函数调用虚函数

来自分类Dev

Javascript重新定义私有函数

来自分类Dev

我应该/可以在此函数中使用“ assoc”来重新定义函数参数吗?

来自分类Dev

在派生类对象作为参数的基类中声明纯虚函数

来自分类Dev

在派生类对象作为参数的基类中声明纯虚函数

Related 相关文章

  1. 1

    如何调用在C ++中具有抽象基类和派生类的定义的基类的虚函数定义?

  2. 2

    派生类的虚函数调用基类的虚函数

  3. 3

    C ++:用指向派生类的指针进行的虚函数调用是否仍具有vlookup

  4. 4

    为什么具有虚函数的类与没有虚函数的类对齐方式不同?

  5. 5

    如何使虚函数接受仅在派生类中定义的数据类型?

  6. 6

    重新定义派生类中的静态成员。爪哇

  7. 7

    通过基类虚函数获取派生类型

  8. 8

    为什么派生类中的虚函数也虚拟?

  9. 9

    带虚函数的C++派生类

  10. 10

    如何定义以派生类型为参数的虚函数?

  11. 11

    可以重新定义constexpr和内联函数吗?

  12. 12

    使用可变参数函数覆盖具有不同函数签名的虚函数

  13. 13

    在派生的模板类中从基类重新实现虚函数

  14. 14

    派生类可以访问基类的构造函数和析构函数吗?

  15. 15

    C ++多态性-调用具有不同签名的派生类方法

  16. 16

    来自派生类的调用函数,该派生类存储在具有基类类型的Map中

  17. 17

    当派生类中的函数无法覆盖基类中的虚函数时发出警告

  18. 18

    有没有办法阻止派生类进一步实现虚函数?

  19. 19

    具有纯虚函数实现的类

  20. 20

    类有虚函数吗?C ++

  21. 21

    纯虚函数可以有参数吗?

  22. 22

    C ++将派生类存储在单个向量中,而派生类不包含重新定义的方法

  23. 23

    可以像使用静态类函数那样使用派生类吗?

  24. 24

    C++ 可以根据给单个构造函数的参数创建派生类而不是bass 类吗?

  25. 25

    在C ++中从派生类的析构函数调用虚函数

  26. 26

    Javascript重新定义私有函数

  27. 27

    我应该/可以在此函数中使用“ assoc”来重新定义函数参数吗?

  28. 28

    在派生类对象作为参数的基类中声明纯虚函数

  29. 29

    在派生类对象作为参数的基类中声明纯虚函数

热门标签

归档