隐藏规则 - 参数/返回类型必须相同吗?

时间:2013-03-04 21:19:25

标签: c++ inheritance override

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

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

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

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

参数不同?

一个是静态而另一个不是?

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

首先是第一件事。

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

using baseClass::functionName();

Const - 如果你用const另一次定义一个函数两次而没有const它们是不同的。 Scott Mayers的书有效的c ++包含一个解释常数和非常数的优秀章节,我建议你阅读它以便全面理解。

你不能通过使用不同的返回类型来覆盖函数,它可能会给出编译时错误,说明它不明确 - 测试它,以确保。

然而,您可以通过使用不同的参数列表来重载函数,这就是人们如何重载函数。

如果你对超载和超载感到困惑 - 那么我建议你也读一读。简而言之,重载是指同一作用域中的两个函数具有不同的参数列表,其中,当您在具有相同参数列表的派生类中重新定义基类虚函数时,重载是。