Если вы планируете использовать указатели базового класса на экземпляры производного класса, и функции имеют одинаковую сигнатуру, то вы, вероятно, захотите сделать функцию virtual
, а также деструкторы класса virtual
.Таким образом, если у кого-то есть указатель родительского класса на производный тип, и он хочет вызвать эту функцию, он, вероятно, захочет выполнить версию дочернего класса, если она отличается от версии родительского.
class Parent
{
public:
virtual ~Parent() {}
virtual void doSomething()
{
std::cout << "Parent";
}
};
class Child : public Parent
{
public:
virtual ~Child() {}
virtual void doSomething()
{
std::cout << "Child";
}
};
int main()
{
Parent *p = new Child();
p->doSomething(); // prints "Child" because of dynamic dispatch
}