Доступ к методу базового класса с объектом производного класса, который имеет метод того же имени

при доступе к нечто () "основы" с помощью объекта производного класса.

#include <iostream>

class  base
{
      public:
      void foo()
     {
        std::cout<<"\nHello from foo\n";
     }
};

class derived : public base
{
     public:
     void foo(int k)
     {
        std::cout<<"\nHello from foo with value = "<<k<<"\n";
     }
};
int main()
{
      derived d;
      d.foo();//error:no matching for derived::foo()
      d.foo(10);

}

как получить доступ к методу базового класса, имеющему метод того же имени в производном классе. сгенерированную ошибку показали. я приношу извинения, если я не ясен, но я чувствую, что ясно выразился как вода.заранее спасибо.

9
задан jww 2 June 2018 в 20:01
поделиться

3 ответа

Вы могли бы добавить using base::foo в ваш производный класс:

class derived : public base
{
public:
     using base::foo;
     void foo(int k)
     {
        std::cout<<"\nHello from foo with value = "<<k<<"\n";
     }
};

Редактировать: Ответ на этот вопрос объясняет, почему ваш base::foo() нельзя напрямую использовать из derived без объявления using.

12
ответ дан 4 December 2019 в 10:31
поделиться
d.base::foo();

6
ответ дан 4 December 2019 в 10:31
поделиться

Добавьте следующее утверждение в ваш производный класс:

using Base::foo ;

Это должно служить цели.

Когда у вас есть функция в производном классе, которая имеет то же имя, что и одна из функций в базовом классе, все функции базового класса скрываются, и вы должны явно ввести их в область видимости вашего производного класса, как указано выше.

2
ответ дан 4 December 2019 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: