Недавно было выдано задание по програмированиию:
Программа должна включать в себя статический и динамический способы создания объектов, и для каждого объекта использовать прямую и косвенную адресацию при вызове методов класса
Вопрос в следующем: каково отличие косвенной адресации от прямой? И если можно пример использования прямой и косвенной адресации при вызове методов класса.
struct T {
int a{5};
};
int main()
{
cout << (new T)->a; // прямая адресация
T* p = new T;
cout << (*p).a; // косвенная адресация
...
По моему так P.S. ну пусть вместо a будет какой то метод класса - это несущественно
Статическое создание объекта происходит в куче, а динамическое в свободной памяти.
int x; - статический объект
new T; - динамический
Прямой метод класса, как и статический вызывается независимо от состояния объекта (сын он или отец класса). Косвенный вызов изучает родословную объекта и вызывается для каждого состояния индивидуально.
T a; a.f(); - прямо
static void f(T x); T::f(a); - прямо
virtual void f(); a.f(); - косвенно
Сборка персонального компьютера от Artline: умный выбор для современных пользователей