Если все, что вам нужно, - это иметь возможность вызывать те методы, которые вы отметили virtual в базовом классе, через функцию с именем "doSomething" (или каким-либо другим вашим действительным приложением), таким образом, что выпродемонстрировал.Затем вы также можете переопределить «doSomething» в производном классе, скопировав его определение из базового класса следующим образом:
#include <iostream>
class base
{
public:
void start() {std::cout << "base start" << std::endl;}
void stop() {std::cout << "base stop" << std::endl;}
void doSomething() { start(); stop(); }
};
class derived : public base
{
public:
void start() {std::cout << "derived start" << std::endl;}
void stop() {std::cout << "derived stop" << std::endl;}
void doSomething() { start(); stop(); }
};
int main () {
derived d;
d.doSomething();
return 0;
}
Однако я уверен, что вы понимаете, что дублирование такого метода в производном классезапахи.Так что лучше этого не делать.
Если вы намеревались использовать позднее связывание где-то еще в вашем коде, то у вас возникнут проблемы, если вы будете избегать использования virtual .Например, изменив значение «main» на следующее:
int main () {
base* d = true ? new derived : new base;
d->doSomething();
return 0;
}
Всегда будет вызывать методы базового класса без virtual .