Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Глава 14. Работа с классами 147
Моделирование реальных объектов Реальные объекты имеют свойства-данные, например номера счетов и балан- сы. Но кроме этого, реальные объекты могут выполнять действия: микроволновые печи готовят, сберегательный счет начисляет проценты, полицейский выписывает штраф и т.д. Функционально ориентированные программы выполняют все необходимые дейст- вия с помощью функций. Программа на C++ может вызвать функцию () для двух строк или функцию () для ввода строки. В главе 26, "Использование потоков ввода-вывода", будет показано, что даже операторы работы с потоками ввода-вывода >> и cout <<) являются не чем иным, как особым ви- дом вызова функции. Для выполнения действий классу Savings необходимы собственные активные свойства: class Savings {
balance; unsigned amount) { balance += balance;
В приведенном примере помимо номера и баланса счета в класс Savings добавле- на функция deposi t (). Теперь класс Savings может самостоятельно управлять сво- им состоянием. Так же, как класс (микроволновая печь) содержит функцию cook () (готовить), класс Savings содержит функцию deposi t (). Функции, определенные в классе, называются
Зачем нужны функции-члены Почему мы должны возиться с функциями-членами? Что плохого в таком фрагменте: class Savings {
balance;
+ amount;
s, amount)
Еще раз напомню: пока что не обращайте внимания на символ — его смысл станет понятен позже. В этом фрагменте deposit() является функцией "вклада на счет". Эта функция поддержки реализована в виде внешней функции, которая выполняет необходи- мые действия с экземпляром класса Savings. Конечно, такой подход имеет право на существование, но он нарушает наши правила объектно-ориентированного программирования.
148 Часть "Классическое" программирование Микроволновая печь имеет свои внутренние компоненты, которые "знают", как разморозить и приготовить продукты или сделать картошку хрустящей. Данные-члены класса схожи с элементами микроволновой печи, а функции-члены — с программами приготовления. Когда я делаю закуску, я не должен начинать приготовление с подключения внут- ренних элементов микроволновой печи. И я хочу, чтобы мои классы работали так же, т.е. чтобы они без всякого внешнего вмешательства знали, как управлять своими "внутренними органами". Конечно, такие функции-члены класса Savings, как de- posi t (), могут быть реализованы и в виде внешних Можно даже располо- жить все функции, необходимые для работы со счетами, в одном месте файла. Мик- роволновую печь можно заставить работать, соединив необходимые провода внутри нее, но я не хочу, чтобы мои классы (или моя микроволновая печь) работали таким образом. Я хочу иметь класс Savings, который буду использовать в своей банковской программе, не задумываясь над тем, какова его рабочая "кухня".
Эта процедура включает два аспекта: создание функции-члена и ее именование (звучит довольно глупо, не правда ли?). Создание функции-члена Чтобы продемонстрировать работу с функциями-членами, начнем с определения класса Student следующим образом: class Student
public:
float gpa;
// добавить пройденный курс к записи float hours, float grade) { // Вычисляем среднюю оценку с учетом // времени различных курсов float weightedGPA; weightedGPA * gpa;
// новый курс semesterHours += hours; weightedGPA += grade hours; gpa = weightedGPA / semesterHours;
// вернуть оценку return gpa;
addCourse (int , float ) является функцией-членом класса По сути, это такое же свойство класса Student, как и свойства semesterHours и gpa. Для функций или переменных в программе, которые не являются членом какого- либо класса, нет специального названия, однако в этой книге я буду называть пере- менные или функции не членами класса, если они не были явно описаны в составе какого-либо класса. |
Последнее изменение этой страницы: 2019-04-19; Просмотров: 189; Нарушение авторского права страницы