Автоматический обход иерархии
От: Kazmerchuk Pavel  
Дата: 14.09.22 11:50
Оценка: 1 (1)
Добрый день.

Есть иерархия классов от которой наследуется пользователь https://godbolt.org/z/nTdPcdEM4

#include <iostream>

struct A {
 void virtual f() = 0;
};
struct B : A {
    void f() override {
        std::cout << "B::f()\n";
    }
};
struct C : B {
    void f() override {
        B::f();
        std::cout << "C::f()\n";
    }
};
struct User1 : C {
    void f() override {
        //C::f();
        std::cout << "User1::f()\n";
    }
};
struct User2 : User1 {
    void f() override {
        //User1::f();
        std::cout << "User2::f()\n";
    }
};
int main()
{
    User2 u2;
    A* obj = &u2;
    obj->f();
    return 0;
}


Если пользователь переопределяет виртуальную функцию он должен вызвать эту же функцию из базового класса.
Можно ли сделать это автоматически или хотя бы выдать ошибку если пользователь забыл вызвать эту функцию из базы.
В классы A,B,C можно добавлять любой код.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.