Ключевое

Динамический и статический типы объекта в C++ относятся к типам, которые он может принимать в различных контекстах. Статический тип определяется во время компиляции и не изменяется во время выполнения программы. Динамический тип, с другой стороны, может изменяться в зависимости от того, на какой объект в данный момент указывает указатель или ссылка.


Статический тип:

  • Определение: Тип объекта, который известен компилятору во время компиляции.
  • Особенности:
    • Статический тип используется для определения типа переменной или выражения на этапе компиляции.
    • Он не может измениться во время выполнения программы.

Пример:

Base baseObj;
Base* basePtr = &baseObj; // Статический тип basePtr - Base*

Динамический тип:

  • Определение: Тип объекта, на который в данный момент указывает указатель или ссылка во время выполнения программы.
  • Особенности:
    • Динамический тип определяется во время выполнения программы и может изменяться в зависимости от объекта, на который указывает указатель или ссылка.
    • Используется для определения точного типа объекта в момент выполнения программы.

Пример:

Base* basePtr = new Derived(); // Динамический тип basePtr - Derived*

Пример использования:

#include <iostream>
 
class Base {
public:
    virtual void show() {
        std::cout << "Base class show()" << std::endl;
    }
};
 
class Derived : public Base {
public:
    void show() override {
        std::cout << "Derived class show()" << std::endl;
    }
};
 
int main() {
    Base baseObj;
    Derived derivedObj;
 
    Base* basePtr = &baseObj;
    basePtr->show(); // Вывод: Base class show()
 
    basePtr = &derivedObj;
    basePtr->show(); // Вывод: Derived class show()
 
    return 0;
}