Как выставить скрытую перегрузку из базового класса? - PullRequest
5 голосов
/ 10 августа 2011

Учитывая этот код:

class base {
public:
  string foo() const; // Want this to be visible in 'derived' class.
}

class derived : public base {
public:
  virtual int foo(int) const; // Causes base class foo() to be hidden.
}

Как я могу сделать base :: foo () видимым для производного без его репликации с фиктивной перегрузкой метода, вызывающей базовый класс? using делает трюк, если так, куда он идет, это так?

class derived : public base {
public:
  virtual int foo(int) const;
  using base::foo;
}

Ответы [ 2 ]

4 голосов
/ 10 августа 2011

Извините за краткий ответ, но да. Это именно так и делает то, что вы хотите:

class derived : public base {
public:
  virtual int foo(int) const;
  using base::foo;
};

Также обратите внимание, что вы можете получить доступ к базе даже без using:

derived x;
string str = x.base::foo(); // works without using
1 голос
/ 10 августа 2011

Директива using сделает выбранные методы из базы видимыми для области действия производного. Но с точки зрения дизайна это нежелательно, поскольку вы скрываете имена в области производных при использовании открытого интерфейса. (Делать это с частным интерфейсом имеет больше смысла)

...