Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Глава 14. Работа с классами 149




По историческим причинам функции-члены называют также метода- ми. Такое название имеет смысл в других объектно-ориентированных языках программирования, но бессмысленно в C++. Несмотря на это, термин приобрел некоторую популярность и среди программистов на C++ , наверное, поскольку его проще выговорить, чем выражение "функция-член" (то, что это звучит гораздо внушительнее, никого не волнует). Так что если во время вечеринки ваши друзья начнут сыпать словечками вроде "методы класса", просто мысленно замените "методы" выражением и все встанет на свои места. Поскольку термин "метод" смысла в C++ не имеет, я не буду исполь- зовать его в этой книге.

 


Именование членов класса

Функция-член во многом похожа на члена семьи. Полное имя нашей функции float )  пишется  как float) , так же

как мое полное имя —  Стефан                             Краткое имя этой функции — addCourse (int , float) , а мое краткое имя —- Стефан. Имя класса в начале полного имени означает, что эта функция является членом класса (: : между имена- ми функции и класса является просто символом-разделителем). Фамилия Дэвис после моего имени означает, что я являюсь членом семьи

Существует и другое название полного имени — расширенное имя.

Мы можем определить функцию addCourse (int , float) , которая не будет иметь ничего общего с классом Student; точно так же, как могут существовать люди с именем Стефан, которые не имеют ничего общего с моей семьей (это можно пони- мать и дословно: я знаю несколько Стефанов, которые не хотят иметь ничего общего с моей семьей).

Вы можете создать функцию с полным именем Teacher:  addCourse                            float ) или даже с именем Golf:  addCourse                                                                                   float) . Имя addCourse (int ,                     без имени класса означает, что это обычная функция, которая не является членом какого- либо класса.

 

Прежде чем вызывать функции-члены класса, вспомните, как мы обращались к данным-членам классов:

class Student

{

 

int

float gpa;

};

Student s; void

{

//обращение к данным-членам объекта s s . seinesterHours = 10;

= 3.0;

}

Обратите внимание, что наряду с именем переменной необходимо указать имя

объекта. Другими словами, приведенный ниже фрагмент программы не имеет смысла.

 

150                              Часть "Классическое" программирование


Student s; void

 

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

10;

/ / член какого объекта какого класса?

10;

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

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

// какого объекта

 

 

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

Формально между данными-членами и функциями-членами нет никакого разли- чия, что видно из приведенного ниже фрагмента.

Student void

{

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

=


= 3.0;

 

}


 

// вызов функции-члена


Как видите, синтаксис вызова функции-члена такой же, как и синтаксис обраще- ния к переменной-члену класса. Часть выражения, которая находится справа от точ- ки, не отличается от вызова обычной функции. Единственное отличие — присутствие слева от точки имени объекта, которому принадлежит функция.

Факт вызова этой функции можно озвучить так: "s является объектом, на который действует addCourse () или, другими словами, объект s представляет собой студен- та, к записи которого добавляется новый курс. Вы не можете получить информацию о студенте или изменить ее, не указав, о каком конкретно студенте идет речь.

Вызов функции-члена без указания имени объекта имеет не больше смысла, чем обращение к данным-членам без указания объекта.

 

членам из

Я так и слышу, как вы повторяете про себя: "Нельзя обратиться к функции-члену без указания имени объекта! Нельзя обратиться к функции-члену без указания имени объекта! Нельзя..." Запомнив это, вы смотрите на тело функции-члена

: addCourse () и... что это? Ведь addCourse () обращается к членам                             не уточняя имени объекта!

Возникает вопрос: все-таки можно или нельзя обратиться к члену класса, не указы- вая его обьекта? Уж поверьте мне, что нельзя. Просто, когда вы обращаетесь к члену класса Student из    (), по умолчанию используется тот экземпляр класса, из которого вызвана функция addCourse (). Вы ничего не поняли? Вернемся к примеру:

 

 

float                   (int hours, float grade)

{

float weightedGPA;

= semesterHours gpa;

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


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 180; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.01 с.)
Главная | Случайная страница | Обратная связь