使用声明和const重载

时间:2011-08-09 13:48:49

标签: c++ inheritance operator-overloading const using-declaration

假设我在基类中有两个版本的operator->(在const上重载)。如果我说

using Base::operator->;

在派生类中,我可以访问这两个版本还是只访问非const版本?

3 个答案:

答案 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();
}