►Почему ссылки не используются вместо указателей...175

Синтаксис работы со ссылками аналогичен синтаксису, используемому при работе с обычными объектами. Так почему бы не перейти на использование только ссылок и никогда не использовать указатели?

_________________

175 стр. Глава 14. Указатели на объекты

Объекты и их адреса — это "две большие разницы", и зачастую синтаксис для ссылок оказывается более сложным, чем синтаксис при работе с указателями. Рассмотрим следующий пример.

    class Student

    {

      public :

        int semesterHours ;

        float gpa ;

        Student valFriend ;

        Student& refFriend ;

        Student* ptrFriend ;

    } ;

    int main( int nNumberOfArgs , char* pszArgs[ ] )

    {

        /* Ссылка на объект в куче */

        Student& student = *new Student ;

        student.gpa = 10 ;

        // To же

        Student& studentFriend = *new Student ;

        studentFriend.gpa = 20 ;

        /* Копирование значения одного объекта типа Student в другой */

        student.valFriend = studentFriend ;

        /* Этот код не будет работать */

        Student& refFriend ;

        refFriend = studentFriend ;

        /* Этот код корректен */

        student.ptrFriend = &studentFriend ;

        return 0 ;

    }

Как видите, я модифицировал класс Student так, чтобы он мог указать своего лучшего друга[ 14 ]. Для этого я пытаюсь воспользоваться ссылочной переменной. В функции main( ) я создаю двух студентов и пытаюсь сделать одного из них другом другого.

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