Курсовая работа: Проектирование и разработка классов средствами языка программирования С++Builder6/0
Программирование "от класса к классу" включает в себя ряд новых понятий. Прежде всего, это - инкапсуляция данных , то есть логическое связывание данных с конкретной операцией. Инкапсуляция данных означает, что данные являются не глобальными - доступными всей программе, а локальными - доступными только малой ее части. Инкапсуляция автоматически подразумевает защиту данных. Для этого в структуре class используется спецификатор раздела private, содержащий данные и методы, доступные только для самого класса. Если данные и методы содержатся в разделе public, они доступны извне класса. Раздел protected содержит данные и методы, доступные из класса и любого его производного класса . Наличие последних позволяет говорить об иерархии классов, где есть классы - родители - шаблоны для создания классов - потомков. Объекты, полученные из описания класса, называют экземплярами этого класса.
Вторым по значимости понятием является наследование . Новый, или производный класс может быть определен на основе уже имеющегося, или базового. При этом новый класс сохраняет все свойства старого: данные объекта базового класса включаются в данные объекта производного, а методы базового класса могут быть вызваны для объекта производного класса, причем они будут выполняться над данными включенного в него объекта базового класса. Иначе говоря, новый класс наследует как данные старого класса, так и методы их обработки. Если объект наследует свои свойства от одного родителя, то говорят об одиночном наследовании . Если же объект наследует атрибуты от нескольких базовых классов, то говорят о множественном наследовании . Простой пример наследования - определение структуры, отдельный член которой является ранее определенной структурой.
Третьим по значимости понятием является полиморфизм . Он основывается на возможности включения в данные объекта также и информации о методах их обработки (в виде указателей на функции). Принципиально важно, что такой объект становится "самодостаточным". Будучи доступным в некоторой точке программы, даже при отсутствии полной информации о его типе, он всегда может корректно вызвать свойственные ему методы. Полиморфной называется функция, независимо определенная в каждом из группы производных классов и имеющая в них общее имя. Полиморфная функция обладает тем свойством, что при отсутствии полной информации о том, объект какого из производных классов в данный момент обрабатывается, она тем не менее корректно вызывается в том виде, к каком она была определена для данного конкретного класса. Практический смысл полиморфизма заключается в том, что он позволяет посылать общее сообщение о сборе данных любому классу, причем и родительский класс, и классы-потомки ответят на сообщение соответствующим образом, поскольку производные классы содержат дополнительную информацию.
1.2 Описание класса
Класс является абстрактным типом данных, определяемым пользователем, и представляет собой модель реального объекта в виде данных и функций для работы с ними.
Данные класса называют полями, а функции класса - методами. Поля и методы называют элементами класса. Описание класса в первом приближении выглядит так:
сlass <имя>
{ [private:]
// описание скрытых элементов
Public:
// описание доступных элементов
}; // описание заканчивается точкой с запятой
Спецификаторы доступа private и public управляют видимостью элементов класса. Элементы, описанные после служебного слова private, видимы только внутри класса. Этот вид доступа принят в классе по умолчанию. Интерфейс класса описывается после спецификатора public. Действие любого спецификатора распространяется до следующего спецификатора или до конца класса. Можно задавать несколько секций private и public, порядок их следования значения не имеет.
Поля класса могут:
иметь любой тип, кроме типа этого же класса (но могут быть указателями или ссылками на этот класс);
быть описаны с модификатором const, при этом они инициализируются только один раз и не могут изменяться;
быть описаны с модификатором static.
Классы могут быть глобальными (объявленными вне любого блока) и локальными (объявленные внутри блока, например функции или другого класса).
Ниже приведены некоторые особенности локального класса:
внутри локального класса можно использовать типы, статические (static) и внешние (extern) переменные, внешние функции и элементы перечислений из области, в которой он описан; запрещается использовать автоматические переменные из этой области;
локальный класс не может иметь статических элементов;
методы этого класса могут быть описаны только внутри класса;
если один класс вложен в другой класс, они не имеют каких либо особых прав доступа к элементам друг друга и могут обращаться к ним только по общим правилам.
В качестве примера создадим класс, моделирующий комплексные числа, записываемые в виде а + bi, где а-действительная часть, а b-мнимая.
class Complex // комплексные числа
{
private: int a;
int ib;
public:
void setcomplex (int x, int y) // установка значений поля