Вывести функцию базового класса с / без аргументов

В чем проблема с кодом ниже?

  class B
{
public:
int test()
{
cout<<"B:test()"<<endl;
return 0;
}
int test(int i)
{
cout<<"B test(int i)"<<endl;
return 0;
}
};

class D: public B
{
public:

int test(char x) { cout<<"D test"<<endl; return 0; }
};

int main()
{
D d;
d.test();
return 0;
}

1

Решение

Проблема в сокрытие имени. функция test() в производном классе D шкуры перегрузки test() в базовом классе Bтак что они не будут учитываться разрешением перегрузки в выражении:

d.test()

Просто добавьте using объявление:

class D: public B
{
public:
using B::test;
//  ^^^^^^^^^^^^^^
int test(char x) { cout<<"D test"<<endl;}
};

Также обратите внимание, что ваши перегрузки test() в базовом классе B должны вернуть int, но они ничего не возвращают.

В соответствии с пунктом 6.6.3 / 2 стандарта C ++ 11 падение конца функции, возвращающей значение, без возврата чего-либо является неопределенное поведение.

4

Другие решения

d.test();

не будет работать, так как ваш производный класс test(char) скрывает все функции базового класса, не будет соответствующей функции для вызова, если вы сделаете выше.

2
По вопросам рекламы [email protected]