Вот пример использования виртуальных функций-членов.
#include <iostream>
struct Base { // abstract base class
virtual void func_1(Base&) = 0;
virtual void func_2(Base&) = 0;
virtual ~Base() = 0;
};
Base::~Base() {} // to not force children to have to implement the destructor
// child classes, overriding the necessary virtual functions in the base class
struct One : Base {
void func_1(Base& o) override {
std::cout << "One calling some Base descendant\n";
o.func_2(*this); // here, one child is calling another
}
void func_2(Base& o) override {}
};
struct Two : Base {
void func_1(Base& o) override {}
void func_2(Base& o) override {
std::cout << "Two called\n";
}
};
int main() {
One o;
Two t;
o.func_1(t);
}
Вывод:
One calling some Base descendant
Two called