Как в указатель на базовый класс вложить ссылку на класс наследник?

В C++, чтобы вложить ссылку на класс-наследник в указатель на базовый класс, необходимо использовать понятие полиморфизма и приведение типов.

Предположим, у нас есть базовый класс Base и класс-наследник Derived. Чтобы вложить ссылку на объект класса Derived в указатель на базовый класс Base, нужно сначала создать объект класса Derived, а затем присвоить адрес этого объекта указателю на базовый класс.

Вот пример кода, демонстрирующий эту ситуацию:

#include <iostream>

class Base {
public:
    virtual void show() {
        std::cout << "Base classn";
    }
};

class Derived : public Base {
public:
    void show() override {
        std::cout << "Derived classn";
    }
};

int main() {
    Derived derived;
    Base* basePtr = &derived; // Вложение ссылки на объект Derived в указатель на Base

    basePtr->show(); // Будет вызван метод show() класса Derived

    return 0;
}

В этом примере создаются два класса - Base и Derived, где Derived наследуется от Base. Мы определяем метод show() как виртуальный в базовом классе Base, а затем переопределяем его в классе Derived.

В функции main() создается объект класса Derived под именем derived и адрес этого объекта присваивается указателю на базовый класс Base. Теперь мы можем использовать указатель на Base, чтобы вызвать метод show(). В результате будет вызван переопределенный метод show() из класса Derived.

Важно отметить, что использование виртуальных функций и указателей на базовый класс позволяет достичь полиморфизма - возможности вызывать переопределенные методы классов-наследников через указатель на базовый класс. Это один из основных принципов объектно-ориентированного программирования и позволяет реализовать гибкую и расширяемую архитектуру программного обеспечения.