Есть ли что-то в стандарте C ++, что мешает мне перегрузить функцию суперкласса?
Начиная с этой пары классов:
class A { // super class
int x;
public:
void foo (int y) {x = y;} // original definition
};
class B : public A { // derived class
int x2;
public:
void foo (int y, int z) {x2 = y + z;} // overloaded
};
Я могу вызвать B :: foo ()
легко:
B b;
b.foo (1, 2); // [1]
Но если я попытаюсь вызвать A :: foo ()
...
B b;
b.foo (12); // [2]
... я получаю ошибку компилятора:
test.cpp: In function 'void bar()':
test.cpp:18: error: no matching function for call to 'B::foo(int)'
test.cpp:12: note: candidates are: void B::foo(int, int)
Просто чтобы убедиться, что я не Что-то не упустил, я изменил имя функции B
, чтобы не было перегрузки:
class B : public A {
int x2;
public:
void stuff (int y, int z) {x2 = y + z;} // unique name
};
И теперь я могу вызвать A :: foo ()
, используя второй пример.
Это стандарт? Я использую g ++.