►Почему ссылки не используются вместо указателей...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( ) я создаю двух студентов и пытаюсь сделать одного из них другом другого.
Первое присвоение копирует объект в тело другого объекта, так что принимающий объект просто содержит копию. Второе присвоение не будет работать, так как С++ не в состоянии отличить присвоение ссылке от присвоения самому объекту, так что корректно работать будет только третье присвоение, приводя к желаемому результату.
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ