ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 6) онлайн
Определение класса
Определение класса smallobj в приведенной выше программе выглядит следу- ющим образом:
class smallobj // определение класса
{
private:
int somedata; // поле класса
public:
void setdata(int d) // метод класса, изменяющий значение поля { somedata =d; }
void showdata() // метод класса, отображающий значение поля
{ cout << "Значение поля равно " << somedata << endl;}
};
Определение начинается с ключевого слова class, за которым следует имя класса; в данном случае этим именем является smallobj. Подобно структуре, тело класса заключено в фигурные скобки, после которых следует точка с запятой (;) (не забывайте ставить этот знак. Конструкции, связанные с типами данных, такие, как структуры и классы, требуют после своего тела наличия точки с за- пятой, в отличие от конструкций, связанных с передачей управления, например функций и циклов).
private и public
Тело класса содержит два не встречавшихся раньше ключевых слова: private и public. Сейчас мы раскроем их смысл.
Ключевой особенностью объектно-ориентированного программирования яв- ляется возможность сокрытия данных. Этот термин понимается в том смысле, что данные заключены внутри класса и защищены от несанкционированного доступа функций, расположенных вне класса. Если необходимо защитить какие- либо данные, то их помещают внутрь класса с ключевым словом private. Такие данные доступны только внутри класса. Данные, описанные с ключевым словом public, напротив, доступны за пределами класса. Вышесказанное проиллюстри- ровано на рис. 6.2.
Зачем скрывать данные?
Не путайте сокрытие данных с техническими средствами, предназначенными для защиты баз данных. В последнем случае для обеспечения сохранности дан-
ных можно, например, попросить пользователя ввести пароль перед тем, как разрешить ему доступ к базе данных. Пароль обеспечивает защиту базы данных от несанкционированного или злоумышленного изменения, а также копирова- ния и чтения ее содержимого.
Класс

Рис. 6.2. Скрытые и общедоступные классы
Сокрытие данных в нашем толковании означает ограждение данных от тех частей программы, которые не имеют необходимости использовать эти данные. В более узком смысле это означает сокрытие данных одного класса от другого класса. Сокрытие данных позволяет уберечь опытных программистов от своих собственных ошибок. Программисты могут сами создать средства доступа к за- крытым данным, что значительно снижает вероятность случайного или некор- ректного доступа к ним.
Данные класса
Класс smallobj содержит всего одно поле данных somedata, имеющее тип int. Дан- ные, содержащиеся внутри класса, называют данными-членами или полями клас- са. Число полей класса, как и у структуры, теоретически может быть любым. По- скольку перед описанием поля somedata стоит ключевое слово private, это поле доступно только внутри класса.
Методы класса
Методы класса — это функции, входящие в состав класса. Класс smallobj содер- жит два метода: setdata() и showdata(). Тела обоих методов состоят из одного опе- ратора, который записан на одной строке с фигурными скобками, ограничива- ющими тело функции. Разумеется, можно использовать и более традиционный способ оформления функций:
void setdata(int d) {
somedata = d;
}
и
void showdata() {
cout << "\nЗначение поля равно " << somedata;
}
В тех случаях, когда тела методов невелики по размеру, имеет смысл исполь- зовать более сжатую форму их записи.
Поскольку методы setdata() и showdata() описаны с ключевым словом public, они доступны за пределами класса smallobj. Мы покажем, каким образом можно получить доступ к этим функциям, чуть позже. На рис. 6.3 показан синтаксис определения класса.

Рис. 6.3. Синтаксис определения класса
Сокрытие данных и доступность функций
Как правило, скрывая данные класса, его методы оставляют доступными. Это объясняется тем, что данные скрывают с целью избежать нежелательного внеш- него воздействия на них, а функции, работающие с этими данными, должны обеспечивать взаимодействие между данными и внешней по отношению к клас- су частью программы. Тем не менее, не существует четкого правила, которое бы определяло, какие данные следует определять как private, а какие функции — как public. Вы можете столкнуться с ситуациями, когда вам будет необходимо скры- вать функции и обеспечивать свободный доступ к данным класса.
Методы класса внутри определения класса
Методы класса smallobj выполняют действия, типичные для методов классов во- обще: они считывают и присваивают значения полям класса. Метод setdata() принимает аргумент и присваивает полю somedata значение, равное значению ар- гумента. Метод showdata() отображает на экране значение поля somedata.
Обратите внимание на то, что функции setdata() и showdata() определены внутри класса, то есть код функции содержится непосредственно в определении класса (здесь определение функции не означает, что код функции помещается в память. Это происходит лишь при создании объекта класса). Методы клас- са, определенные подобным образом, по умолчанию являются встраиваемыми (встраиваемые функции обсуждались в главе 5 «Функции»), Позже мы увидим,
что функции внутри класса можно не только определять, но и объявлять, а оп- ределение функции производить в другом месте. Функция, определенная вне класса, по умолчанию уже не является встраиваемой.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Схожі підручники
- Методичні вказівки до виконання практичного заняття на тему «Графічний метод розв’язку задач НЛП» Розв’язати графічним методом задачу НЛП
- Регіональна економіка (методичка, самостiйна робота, ідивiдуальна, тести ...)
- Конспект лекцій з курсу Введення у фінансову діяльність (частина 2)
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 8) онлайн
- Соціальна педагогіка (частина 3)
- Соціальна педагогіка (частина 1)
