Доступ к методу базового класса с помощью объекта производного класса, который имеет метод с тем же именем - PullRequest
9 голосов
/ 13 марта 2010

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

#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);

}

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

Ответы [ 4 ]

12 голосов
/ 13 марта 2010

Вы можете добавить 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.

6 голосов
/ 13 марта 2010
d.base::foo();

2 голосов
/ 13 марта 2010

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

using Base::foo ;

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

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

0 голосов
/ 03 июля 2013

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

#include<iostream.h>
class base
{
public:
void fun()
{
    cout<<"base class\n";
}
};
class der : public base
{
public:
void fun()
{
cout<<"derived class\n";
}
};
int main()
{

der d1;


d1.base::fun();


return 0;
} 

Вывод будет базовым классом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...