Ключевое
Динамический и статический типы объекта в 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;
}