2.Классы.
Класс - это тип данных, определяемый пользователем. Класс есть расширение понятия структуры языка С. Класс содержит дпнные и функции (называемые методами), которые являются членами класса. Переменная типа класс объект.
Синтаксис объявления класса:
class имя_класса
{
private:
//закрытые данные
//объявление закрытых методов
//…………
public:
//открытие данных
//объявление открытых методов
//…………
};
Пример. Класс Rectangle.
При геометрических измерениях прямоугольник определяется его длиной и шириной. Это позволяет нам вычислять периметр и площадь фигуры.
class Regtangle
{
private:
//длина и ширина прямоугольника
float length, width;
publik:
//конструктор
Rectangle (float l=0, float w=0);
//методы для нахождения и измерения закрытых данных
float GetLength (void) const;
void PutLength (float l);
float GetWidth (void) const;
void PutWidth (float w);
//вычислять и возвращать периметр и площадь
float Perimeter (void) const;
float Area (void) const;
};
Методы GetLength, GetWidth, Perimeter, Area имеют ключевое слово const после списка параметров. Это объявляет каждый метод как константный. В определении константного метода никакой элемент данных не может быть изменен. Другими словами, выполнение константных методов не изменяет состояние объекта типа Rectangle.
КОНСТРУКТОР
Функция называемая конструктором класса, имеет то же имя, что и класс. Подобно другим функциям С++, в неё могут передаваться параметры, используемые для инициализации одного или более данных - членов класса.
Наш конструктор Rectangle принимает параметры l и w, используемые для инициализации длины и ширины объекта. По умолчанию они понимаются = 0 (если l и w не передаются явно). Заметим, что в объявлении класса присутствует только объявление конструктора. Реализация должна быть написана отдельно.
ОБЪЯВЛЕНИЕ ОБЪЕКТА
Объявление класса описывает новый тип данных. Объявление объекта типа класс создаёт экзэмпляр класса. Это делает реальный объект типа класс и автоматически вызывает конструктор для инициализации некоторых или всех данных - членов класса. Параметры для объекта передаются конструктору в скобках после имени объекта. Заметьте, что конструктор не имеет возвращаемого типа, поскольку вызывается только во время создания объекта.
Например, следующие объявления создают два объекта типа Rectangle:
Rectange room (10,12);
Rectange t; // использование параметров по умолчанию (0,0).
Каждый объект имеет все данные - члены и методы - члены, объявленные в классе.
Открытые члены доступны с использованием имени объекта и имени члена, разделяемых " . "
Например,
x=room.Area( ); // (x=10*12=120) x=площадь (10,12)
t=PutLength (20); // длина будет =20
y=t.GetWidth; // y=0
В объявлении объекта room конструктор установит первоначально значение длины =10, ширины =12; но мы можем изменять эти значения, используя методы доступа:
room.PutLength (15);
room.PutWidth (12);
Объявление класса не обязательно должно включать конструктор. Но тогда объект остаётся неинициализированным в точке его объявления.
Например, в нашем случае мы могли бы сами задавать длину и ширину с помощью открытых методов доступа. Включая в класс конструктор, мы обеспечиваем правильную инициализацию важных данных. Конструктор позволяет объекту инициализировать его собственные данные - члены класса. Класс Rectangle содержит члены класса типа float. В общем, класс может содержать элементы любого допустимого типа C++, даже других классов.
Однако, класс не может содержать объект его собственного типа в качестве члена.
Реализация класса
Каждый метод в объявлении класса должен быть определён. Определения функций могут быть в теле класса (встроенный код) или вне его. При помещении вне тела класса её имя должно включать операцию разрешения области действия.
Например, определение функции GetLength( ), когда оно содержится вне класса, должно иметь вид:
float Rectangle :: GetLength (void) const // константный метод
{
return Length; // доступ к зактытому члену Length
}
Функция - член класса может быть записана внутри тела класса:
class Rectangle
{
private:
float length;
float width;
publc:
float GetLength (void) const {return length;}
};
Реализация конструктора
Конструктор может быть пределён внутри и вне класса:
Rectangle :: Rectangle (float l, float w)
{
length = l;
width = w;
}
C++ представляет специальный синтаксис для инициализации членов класса.
Rectangle :: Rctangle (float l, float w): length(l), width(w)
{ }
Создание объектов
Rectangle square (10,10);
Rectangle S; // (0,0) по умолчанию
Rectangle yard=square; // (10,10) копируются из square
Объекты могут свободно присваиваться один другому.
S=yard; // побитное копирование данных - членов класса
Объект можно создать конструктором:
S=Rectangle (20,30);
Edit1->Text=Rectangle (20,30).GetWidth; // будет 30
<<<назад