class Base{
//...
public:
int get()const{ // const
// Do something.
}
int get(int x){
// Do Someting.
}
//...
};
class Derived:public Base{
//....
public:
int get(){ // not const (not the same signature as the one is the base class)
//Dosomething
}
//...
};
我知道Derived类中的get()将隐藏Base类中的get()和get(int x)方法。所以我的问题是:
1)这是否意外超载或覆盖?
2)确实在派生类中使get()const会改变一些东西(隐藏或不隐藏Base类方法)。
引用c ++书:
“当你想要覆盖它时,隐藏基类方法是一个常见的错误 忘记包含关键字const。 const是签名的一部分,并将其关闭 更改签名,因此隐藏方法而不是覆盖它。 “
答案 0 :(得分:7)
既不是超载也不是压倒一切。相反,它是隐藏。
如果其他功能也可见,将重载,您可以使用using
来实现:
class Derived : public Base
{
public:
using Base::get;
int get();
};
即使你在派生类中声明了int get() const
,它也只是隐藏了基函数,因为基函数不是virtual
。
答案 1 :(得分:2)
两者都没有,只是“隐藏”。
没有。隐藏基于函数名称而不是函数签名。
只有在您声明了基类功能virtual
时,您的引用才有意义;你无法覆盖非virtual
函数。
答案 2 :(得分:2)
重载是一个名为相同的函数,但具有不同的签名。
覆盖覆盖已存在的签名。
你刚刚“隐藏”,这两者都没有。
快速谷歌搜索显示: http://users.soe.ucsc.edu/~charlie/book/notes/chap7/sld012.htm您可能会觉得有帮助。