05.09.2016 Views

Стефан Р. - С++ Для чайников

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Student s;<br />

void fn(void)<br />

{<br />

//этот пример ошибочен<br />

semesterHours = 10;<br />

/ / член какого объекта и какого класса?<br />

Student::semesterHours = 10;<br />

// теперь ясно, какого класса,<br />

// однако до сих пор не ясно,<br />

// какого объекта<br />

Обращение к функциям-членам<br />

Формально между данными-членами и функциями-членами нет никакого различия,<br />

что видно из приведенного ниже фрагмента.<br />

Student f;<br />

void fn(void)<br />

{<br />

//все приведенные команды обращаются к объекту s<br />

s.semesterHours = 10;<br />

s.gpa = 3.0;<br />

s.addCourse(3, 4.0); // вызов функции-члена<br />

}<br />

Как видите, синтаксис вызова функции-члена такой же, как и синтаксис обращения<br />

к переменной-члену класса. Часть выражения, которая находится справа от точки,<br />

не отличается от вызова обычной функции. Единственное отличие — присутствие<br />

слева от точки имени объекта, которому принадлежит функция.<br />

Факт вызова этой функции можно озвучить так: "s является объектом, на который<br />

действует addCourse () "; или, другими словами, объект s представляет собой студента,<br />

к записи которого добавляется новый курс. Вы не можете получить информацию<br />

о студенте или изменить ее, не указав, о каком конкретно студенте идет речь.<br />

Вызов функции-члена без указания имени объекта имеет не больше смысла, чем<br />

обращение к данным-членам без указания объекта.<br />

2)оапцп к членам из фцшеции-чиеяа<br />

Я так и слышу, как вы повторяете про себя: "Нельзя обратиться к функции-члену<br />

без указания имени объекта! Нельзя обратиться к функции-члену без указания имени<br />

объекта! Нельзя..." Запомнив это, вы смотрите на тело функции-члена student<br />

: : addCourse () и... что это? Ведь addCourse () обращается к членам класса, не<br />

уточняя имени объекта!<br />

Возникает вопрос: все-таки можно или нельзя обратиться к члену класса, не указывая<br />

его обьекта? Уж поверьте мне, что нельзя. Просто, когда вы обращаетесь к члену<br />

класса Student из addCourse (), по умолчанию используется тот экземпляр класса, из<br />

которого вызвана функция addCourse (). Вы ничего не поняли? Вернемся к примеру:<br />

#include "student.h"<br />

float Student: :addCourse (int hours, float grade)<br />

{<br />

float weightedGPA;<br />

weightedGPA = semesterHours * gpa;<br />

// добавим новый курс<br />

Глава 14. <strong>Р</strong>абота с классами 151

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!