0

我有几个关于隐藏的问题/一般性问题?

基类有一个函数:f() 派生类现在声明虚拟 f()

如果派生函数是 const 会发生什么?这不隐藏吗?

如果返回类型不同怎么办?

参数不一样?

一个是静态的,另一个不是?

只是想知道这两个函数之间的哪些差异导致隐藏/不导致隐藏。

4

2 回答 2

4

隐藏是关于名字,而不是签名。

于 2013-03-04T21:23:24.440 回答
0

先说第一件事。

隐藏是指如果您在派生类中覆盖基类函数,那么在该派生类中,您定义的原始基类方法将被隐藏。- 也就是说,如果您需要从基类访问函数的定义,那么您需要在代码中包含它以使其不被隐藏:

using baseClass::functionName();

const - 如果你用 const 定义一个函数两次,另一个没有 const,它们是不同的。Scott Mayers 的书 Effective c++ 包含一个解释 const 和 non const-ness 的优秀章节,我建议你阅读它以获得透彻的理解。

您不能通过具有不同的返回类型来覆盖函数,它可能会给出编译时错误,说明它的模棱两可 - 测试它,以确保。

但是,您可以通过具有不同的参数列表来重载函数,这就是重载函数的方式。

如果您对超载和超载感到困惑-那么我建议您也阅读一下。简而言之,重载是指在同一范围内有两个具有不同参数列表的函数,而覆盖是指在派生类中重新定义具有相同参数列表的基类虚函数。

于 2013-03-04T21:40:53.677 回答