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


Глава 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; Нарушение авторского права страницы


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