class A {
public:
void foo() {
cout << "A::foo()" << endl;
}
void foo(int a) {
cout << "A::foo( int )" << endl;
}
};
class B : public A {
public:
void foo(int a) {
cout << "B::foo( int )" << endl;
}
};
int main()
{
B b;
b.foo();
return 0;
}
Компилятор выдает ошибку:
ошибка: нет подходящей функции для вызова ‘B::foo()’
замечание: претенденты: void B::foo(int)
Т. е. при переопределении функции в наследнике необходимо переопределять все перегруженные версии функции. Не кажется ли вам нелогичным такое поведение? По-моему, логичнее было бы вызывать подходящую по сигнатуре функцию родительского класса.
Здравствуйте, Аноним, Вы писали:
А>Т. е. при переопределении функции в наследнике необходимо переопределять все перегруженные версии функции. Не кажется ли вам нелогичным такое поведение? По-моему, логичнее было бы вызывать подходящую по сигнатуре функцию родительского класса.
Здравствуйте, _nn_, Вы писали: __>1. Поиск
Что "поиск"? __>2. using A::f
Как вызвать метод родительского класса я знаю. Вопрос в том, почему он не вызывается автоматически.
Здравствуйте, j_n_ig, Вы писали:
__>Здравствуйте, _nn_, Вы писали: __>>1. Поиск __>Что "поиск"?
Воспользоваться поиском http://rsdn.ru/search/
__>>2. using A::f __>Как вызвать метод родительского класса я знаю. Вопрос в том, почему он не вызывается автоматически.
Это не вызов метода.
Вызов метода не содержит using.
class A {
public:
void foo() {
cout << "A::foo()" << endl;
}
void foo(int a) {
cout << "A::foo( int )" << endl;
}
};
class B : public A {
public:
using A::f;void foo(int a) {
cout << "B::foo( int )" << endl;
}
};
int main()
{
B b;
b.foo();
return 0;
}
Здравствуйте, Аноним, Вы писали:
А>Т. е. при переопределении функции в наследнике необходимо переопределять все перегруженные версии функции. Не кажется ли вам нелогичным такое поведение? По-моему, логичнее было бы вызывать подходящую по сигнатуре функцию родительского класса.
кейворд: "сокрытие имён", "name hiding"
разруливается так
struct A
{
void foo();
void foo(int);
};
struct B : A
{
using A::foo;void foo(int);
};
По поводу логичности сокрытия имён — вопросы к Бьярну.