перегруженные функции скрыты в производном классе

В производном классе, Если я переопределяю/перегружаю имя функции от Базового класса,
затем те перегруженные функции не являются accessable/visible к производному классу.
Почему это??

Если мы не перегружаем функцию oveloaded от базового класса в производном классе затем, все перегруженные версии той функции доступны производному классу
объекты, почему это??
какова причина позади этого. Если Вы объясняете это на уровне компоновщика и компиляторе
это будет более полезно мне. разве не возможно поддерживать этот вид scinario??

Edited  
For examble:

class B  
{  

  public: 
     int f() {}
     int f(string s) {}
};

class D : public B
{
   public:
    int f(int) {}
};

int main()
{
   D d;
   d.f(1);
   //d.f(string);  //hidden for D
} 

Now object 'd' can't access f() and f(string).
15
задан esh 8 July 2010 в 09:42
поделиться

2 ответа

TTBOMK у этого нет реальной технической причины, просто Страуструп при создании языка посчитал это лучшим вариантом по умолчанию. (Это похоже на правило, согласно которому значения rvalue не связываются неявно со ссылками, отличными от const .)

Вы можете легко обойти это, явно перенеся версии базового класса в область видимости производного класса:

class base {
public:
  void f(int);
  void g(int);
};

class derived : public base {
public:
  using base::f;
  void f(float);
  void g(float); // hides base::g
};

или явно вызвав:

derived d;
d.base::g(42); // explicitly call base class version
14
ответ дан 1 December 2019 в 03:34
поделиться

Функции доступны, нужно только вызвать их явно:

struct A {
   void f(){}
};

struct B : public A {
   void f() {}
};

int main() {
   B b;
   b.f();     // call derived function
   b.A::f();  // call base function
}
7
ответ дан 1 December 2019 в 03:34
поделиться
Другие вопросы по тегам:

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