我有几个问题/关于隐藏的一般问题?
基类有一个函数:f()派生类现在声明虚拟f()
如果派生函数是const,会发生什么?这不隐藏吗?
如果返回类型不同,那该怎么办?
参数不同?
一个是静态而另一个不是?
只是想知道这两个函数之间的哪些差异导致隐藏/不会导致隐藏。
答案 0 :(得分:3)
隐藏是关于姓名,而不是签名。
答案 1 :(得分:0)
首先是第一件事。
隐藏是指如果您在派生类中重写基类函数,那么在该派生类中,您定义的原始基类方法将被隐藏。 - 也就是说,如果您需要从基类访问函数的定义,那么您需要在代码中使用它,而不是隐藏它:
using baseClass::functionName();
Const - 如果你用const另一次定义一个函数两次而没有const它们是不同的。 Scott Mayers的书有效的c ++包含一个解释常数和非常数的优秀章节,我建议你阅读它以便全面理解。
你不能通过使用不同的返回类型来覆盖函数,它可能会给出编译时错误,说明它不明确 - 测试它,以确保。
然而,您可以通过使用不同的参数列表来重载函数,这就是人们如何重载函数。
如果你对超载和超载感到困惑 - 那么我建议你也读一读。简而言之,重载是指同一作用域中的两个函数具有不同的参数列表,其中,当您在具有相同参数列表的派生类中重新定义基类虚函数时,重载是。