neu*_*rte 3 c++ overloading protected
鉴于代码:
class Foo
{
public:
Foo() {}
int foo() const { return 6; }
protected:
int foo() { return 5; }
};
int main(int argc, char* argv[])
{
Foo foo;
foo.foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误:
'Foo :: foo':无法访问类'Foo'中声明的受保护成员
在实际使用中,我正在尝试提供一个函数,该函数返回指向类所存储的对象的指针 - 可以为成员修改,而const则为其他所有人修改.我想如果我说的话
const Item *i = foo.foo();
Run Code Online (Sandbox Code Playgroud)
在非成员函数中,将调用正确的const变量.不知何故,编译器坚持访问受保护部分中的非const变体.知道为什么吗?谢谢.
您的变量是非const的,因此选择了函数的非常量重载.发生重载解析后,将检查可访问性.
当const和非const函数都存在时,const版本仅在const对象上调用.你的foo变量不是const.如果你愿意,你可以使用a 使其成为const const_cast:
const_cast<Foo const&>(foo).foo();
Run Code Online (Sandbox Code Playgroud)
但是,使用起来很麻烦.更好的解决方案是给内部函数一个不同的名称,这样它就不会与外部API发生冲突.