Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ все лекции 2005.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
410 Кб
Скачать
☆

Структуры.

Операция → обеспечивает доступ к элементу структуры через указатель на объект.

Пример:

TPers = & TPers

PPers →Sex = true;

Cамоадресуемые структуры:

Не редко в памяти надо динамически размещать последовательность структур, как бы формирую некий фрагмент БД, предназначенный для операторного анализа и обработки.

Struct TPers

{AnsiString FIO;

bool Sex;

int Voz;

TPers * Pr;

}

Пример: пример формирования в памяти списка структур. Для этого надо 3 переменных:

TPers * Po = null; *Pnew; *Oold;

Вставка структур в список:

Pnew = new TPers; - выделяем память под новую структуру.

Pnew→ FIO = ‘Иванов И. И.’

Pnew→ Sex = true

…………………..

if (Po = = null) Po = Pnew; - проверяем Po на указание первой структуры.

Else Pold→Pr = Pnew;

Pold = Pnew;

Сформировав список в памяти его легко просматривать, проходя в цикле по указателям.

Проверяем не равно ли Pnew = Po

Pnew = Po;

While (Pnew !=null)

{Show Message (Pnew→ FIO);

Pnew = Pnew→Pr

}

Классы.

Это тип данных, определенный пользователем. В С++ имеется множество предопределенных классов (AnsiString). Класс должен быть объявлен до того, как будет объявлена хотя бы одна переменная этого класса.

Class <имя класса>: <cписок классов родителей>

{public: // доступна всем; <данные, методы, свойства, события>

published: // видны в инспекторе объектов и изменяемые <данные, свойства>

protected:// доступна только потомкам < данные, методы, свойства, события >

private:// доступна только в классе <данные, методы, свойства, события>

}

Если объявляемый класс не имеет предшественников, то список классов родителей вместе с предшествующим : - отпускается.

Пример:

Class MyClass: Class1, Class2

{ public:

MyClass (Int=0);

Void SetA(int);

Int GetA(void);

Int Fa;

Protected:

}

int F(int);

Доступ можно получить только функция MyClass, SetA, GetA. Поля Fa и функция F – закрытые элементы.

Открытая функция MyClass с именем, совпадающим с именем класса – это конструктор класса, который должен инициализировать данные в момент создания объекта класса. Присутствие конструктора в объявлении класса не обязателен. При этом пользователь сам должен создать начальное значение данным элементам класса. Объявление данных элементов (полей) выглядит также как объявление переменных или объявление полей в структурах.

После того, как класс объявлен можно создать объекты этого класса.

Пример:

MyClass Мс, Мс10[10], * PMc

Создается объект Mc, объявленного выше класса MyClass, массив Мс10 из 10 объектов данного класса и указатель PMc на объект этого класса. Создание объектов класса простым объявлением переменных, возможно только в случае, если среда предков класса, нет классов библиотеки компонента С++. Если же такие предки есть, то создание указателя на объект этого класса возможно только операцией new/

Пример:

Class MyClass2: Tobject

{…}

MyClass * P2 = new MyClass2

Функции - элементы, дружественные функции, константные функции.

Поля данных, исходя из принципа инкапсуляции всегда должны быть защищены от несанкционированного доступа. Доступ к ним как правило должен осуществляться только через эти функции, включающие методы чтения и записей полей. В этих функциях должна осуществляться проверка данных, чтобы не записать случайно в поля неверные данные.

Class MyClass

{ public:

Void SetA(int);

Int GetA(void);

Private:

Int Fa;

}

Реализация функции чтения и записи может иметь вид

Void MyClass:: SetA (Int value)

{if (…) // проверка

{Fa = value;}

}

Int MyClass:: GetA(void);

{return Fa;}

В приведенном примере объявление класса содержит только прототипы функций, а их реализация вынесена из описания класса. Все описания функций элементов содержит ссылку на класс с помощью операции области действия (::).

Функции элемента класса имеют доступ к любым другим функциям – элементам и к любым данным – элементам как к открытым, так и к закрытым.

Клиенты класса (внешние функции) имеют доступ только к открытым функциям – элементам и данным – элементам.

Чтобы дать доступ внешним функциям, к закрытым полям класса функцию нужно объявить как друга класса с помощью спецификации Friend.

Пример:

Friend void int Fa (MyClass * )

В программе:

Void int Fa (MyClass * P)

{ P→ Fa++}

Через Р доступ к Fa.

Дружественными могут быть не только функции, но и целые классы. Иногда требуется создать объект класса как константный с помощью идентификатора const.

Чтобы не возникло ошибок при компиляции нужно снабдить все функции – элементы класса, предназначенные для чтения данных спецификаторами const.

Пример:

Int GetA(void) const – описание

……………..

Int MyClass :: GetA(void) const

{return Fa;} – реализация

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]