С++ для начинающих



         

Параметры-ссылки и параметры-указатели


Когда же лучше использовать параметры-ссылки, а когда – параметры-указатели? В конце концов, и те и другие позволяют функции модифицировать объекты, эффективно передавать в функцию большие объекты типа класса. Что выбрать: объявить параметр ссылкой или указателем?

Как было сказано в разделе 3.6, ссылка может быть один раз инициализирована значением объекта, и впоследствии изменить ее нельзя. Указатель же в течение своей жизни способен адресовать разные объекты или не адресовать вообще.

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

class X;

void manip( X *px )

{

    // проверим на 0 перед использованием

    if ( px != 0 )

        // обратимся к объекту по адресу...

}

Параметр-ссылка не нуждается в этой проверке, так как всегда существует именуемый ею объект. Например:

class Type { };

void operate( const Type& p1, const Type& p2 );

int main() {

    Type obj1;

    // присвоим objl некоторое значение

    // ошибка: ссылка не может быть равной 0

    Type obj2 = operate( objl, 0 );

}

Если параметр должен ссылаться на разные объекты во время выполнения функции или принимать нулевое значение (ни на что не ссылаться), нам следует использовать указатель.

Одна из важнейших сфер применения параметров-ссылок – эффективная реализация перегруженных операций. При этом использование операций остается простым и интуитивно понятным. (Подробнее данный вопрос рассматривается в главе 15.) Разберем маленький пример. Представим себе класс Matrix (матрица). Хорошо бы реализовать операции сложения и присваивания “привычным” способом:

Matrix a, b, c;

c = a + b;

Эти операции реализуются с помощью перегруженных операторов – функций с немного необычным именем. Для оператора сложения такая функция будет называться operator+. Посмотрим, как ее определить:

Matrix       // тип возврата -  Matrix

operator+(   // имя перегруженного оператора




Содержание  Назад  Вперед