Перегрузка функции суперкласса

Есть ли что-то в стандарте 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 ++.

9
задан James McNellis 4 January 2011 в 19:24
поделиться