Язык программирования C++


Распределение памяти при передаче аргументов функции - часть 3


Complex& Complex::Add(const Complex& x) { real += x.real; imaginary += x.imaginary; return *this; // передать ссылку на текущий объект }

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

x.Add(y) = z;

К значению объекта x прибавляется значение y, а затем результату присваивается значение z (фактически это эквивалентно x = z). Чтобы запретить подобные конструкции, достаточно добавить описатель const перед типом возвращаемого значения:

const Complex& Complex::Add(const Complex& x) . . .

Передача аргументов и результата по ссылке аналогична передаче указателя в качестве аргумента:

Complex* Complex::Add(Complex* x) { real += x->real; imaginary += x->imaginary; return this; }

Если нет особых оснований использовать в качестве аргумента или результата именно указатель, передача по ссылке предпочтительней. Во-первых, проще запись операций, а во-вторых, обращения по ссылке легче контролировать.




Начало  Назад  Вперед