假设我在基类中有两个版本的operator->
(在const上重载)。如果我说
using Base::operator->;
在派生类中,我可以访问这两个版本还是只访问非const版本?
答案 0 :(得分:4)
与名称隐藏相同的业务。这是全有或全无。使用声明(7.3.3)带来名称,而不是成员。
ISO / IEC 14882(2003),7.3.3。 1 / using声明在声明中引入了一个名称 出现使用声明的区域。那个名字是同义词 对于在其他地方宣布的某个实体的名称。
我鼓励你阅读7.3.3,里面有微妙的东西。你不能使用 - 声明一个模板,你使用的名称所引用的所有成员都必须是可访问的,这些名称可以用于重载解析以及块中的名称以及找到使用声明(即它们不隐藏任何内容) )等等。
答案 1 :(得分:3)
您可以访问该父级中具有相同名称的方法/运算符的所有版本。
答案 2 :(得分:2)
两者。你试过吗? (该死的答案很简短:嗯,这是例子:
#include <iostream>
#include <string>
struct bar
{
void foo() { std::cout << "non_c:foo()" << std::endl; }
void foo() const { std::cout << "c:foo()" << std::endl; }
};
class base
{
public:
bar* operator->() { return &b; }
bar const* operator->() const { return &b; }
private:
bar b;
};
class derived : public base
{
public:
using base::operator->;
};
int main(void)
{
const derived d = derived();
derived e;
d->foo();
e->foo();
}