В чем отличие косвенной адресации от прямой при вызове методов класса?

268
04 мая 2018, 12:51

Недавно было выдано задание по програмированиию:

Программа должна включать в себя статический и динамический способы создания объектов, и для каждого объекта использовать прямую и косвенную адресацию при вызове методов класса

Вопрос в следующем: каково отличие косвенной адресации от прямой? И если можно пример использования прямой и косвенной адресации при вызове методов класса.

Answer 1
struct T {
    int a{5};
};
int main()
{    
    cout << (new T)->a; // прямая адресация
    T* p = new T;
    cout << (*p).a;  // косвенная адресация
    ...

По моему так P.S. ну пусть вместо a будет какой то метод класса - это несущественно

Answer 2

Статическое создание объекта происходит в куче, а динамическое в свободной памяти.

int x; - статический объект
new T; - динамический

Прямой метод класса, как и статический вызывается независимо от состояния объекта (сын он или отец класса). Косвенный вызов изучает родословную объекта и вызывается для каждого состояния индивидуально.

T a; a.f(); - прямо
static void f(T x); T::f(a); - прямо
virtual void f(); a.f(); - косвенно
READ ALSO
Не создаётся динамический массив [требует правки]

Не создаётся динамический массив [требует правки]

Помогите пожалуйстаПри попытке создания, последовательно, нескольких динамических массивов, первый создаётся, а у всех последующих вылетает...

248
Макрос для нахождения минимального

Макрос для нахождения минимального

Как написать макрос для нахождения наименьшего из трёх элементов?

285
Порт игр на консоли [требует правки]

Порт игр на консоли [требует правки]

Как портируют игры на консоли? Расскажите пожалуйста(Unreal Engine 4) или другие движки и языки

245
C++. Вылетает на повторном вызове delete[]

C++. Вылетает на повторном вызове delete[]

Функция подгружает данные с файлаПеред каждой новой загрузкой пытаюсь почистить данные в массиве, чтобы подгрузить все заново

261