как избежать пулимофи c звонка в базовый класс - PullRequest
2 голосов
/ 31 марта 2020

У меня есть класс, в котором некоторые методы вызывают другие методы, как в следующем примере:

class Base {
public:
    virtual void foo() {
        cout << "base::foo" << endl;
        bar();
    }
    virtual void bar() {
        cout << "base::bar" << endl;
    }
};

Затем я хочу создать класс-оболочку, в котором каждый метод вызывает метод базового класса и некоторые дополнительные вещи. что я использую для некоторых тестов.

class Derived :public Base {
public:
    void foo() override {
        cout << "derived::foo" << endl;
        Base::foo();
    } 
    void bar() override {
        cout << "derived::bar" << endl;
        Base::bar();
    }
};

Моя программа вызывала функции из базового класса, и я изменил ее на вызов из класса Derived.

int main() {
    //Base A;
    Derived A;
    A.foo();
    return 0;
}

В приведенном выше примере, когда я вызываю Derived :: foo ( ), он вызывает Base :: foo (), что в свою очередь вызывает bar (); Из-за полиморфизма, когда bar () вызывается из Base :: foo (), он разрешается в Derived :: bar (). Я хотел бы, чтобы Base :: foo () вызывал Base :: bar () и только вызовы из Derived для вызова базовых методов. Возможно ли достичь этого без изменения базового класса?

1 Ответ

4 голосов
/ 31 марта 2020

Вы можете использовать stati c отправку в виртуальную функцию, указав имя функции:

virtual void foo() {
    cout << "base::foo" << endl;
    Base::bar();
}

Возможно ли достичь этого без изменения базового класса?

Я так не думаю; по крайней мере, если не считать изменение определения функций-членов базового класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...