
- •1. Языки, грамматики и их классификация. Примеры контекстно-свободных грамматик.
- •2 Трансляция арифметических выражений.
- •3 Классы. Свойства и методы, защита элементов классов. Создание и уничтожение объектов.
- •4 Управление динамической памятью
- •5 Технология создания программ и комплексов. Визуальное программирование.
- •6 Препроцессор и его основные возможности.
- •7 Адреса, указатели, ссылки. Адресная арифметика.
3 Классы. Свойства и методы, защита элементов классов. Создание и уничтожение объектов.
Описание классов (свойства и методы)
Закрытые, защищенные и общие элементы – область видимости PUBLIC, PROTECTED, PRIVATE
Описание и определение методов (функций)
Конструкторы и их виды
Деструкторы
Описание объектов классов
Переопределение операций ???
Пример класса символьных строк
Класс является обобщением понятия структура (запись) путем добавления в состав нового типа не только элементов переменных (свойства), но и функций (методов) по их обработке (ИНКАПСУЛЯЦИЯ). Кроме того, некоторые элементы можно закрывать от несанкционированного доступа (ЗАЩИТА ДАННЫХ). На базе одних классов можно строить новые классы, добавляя или изменяя их свойства и методы (НАСЛЕДОВАНИЕ). Класс является механизмом создания новых типов данных, а переменные, описанные с помощью этих типов, называются объектами.
Описание класса содержит перечисление всех его элементов с указанием степени их защиты. PUBLIC-элементы доступны из всех фрагментов программы, где виден соответствующий объект. PROTECTED-переменные доступны только элементам (членам) самого класса и его потомкам, т.е. членам производных классов. PRIVATE – переменные доступны только членам данного класса – это самая серьезная степень защиты элементов классов.
Элементы классов, которые являются функциями, должны быть определены (объявлены) внутри классов или объявлены внутри класса, а описаны вне классов. Обычно внутри классов описывают очень короткие функции.
Особую группу членов-функций классов составляют конструкторы и деструкторы, которые выполняются автоматически при создании и уничтожении объектов, соответственно. Конструкторов в классе может быть несколько, но все они должны отличаться друг от друга списком параметров, а деструктор может быть только один и он не должен иметь параметров. Имя конструктора должно совпадать с именем класса, имя деструктора начинается с символа тильда и далее следует имя класса. Конструкторы и деструкторы представляют собой удобные средства, но являются не обязательными.
Описание объектов некоторого класса выглядит как описание обычных переменных, но еще можно указывать фактические параметры для указания автоматического вызова нужного конструктора.
Пример описания класса символьных строк:
class STR
{
private :
int len; // длина строки
char * s; // указатель на саму строку в динамической памяти
public :
STR () { s = NULL; len = 0; } // конструкторы
STR (char c);
~STR (); // деструктор
// другие функции-члены
int Length () { return len; }
};
STR::STR (char c) // ранее этот конструктор был только объявлен
{
s = new char [2];
s [0] = c, s [1] = ‘\0’;
len = 0;
}
STR::~STR () // ранее этот деструктор был только объявлен
{
if ( s != NULL ) // освобождение памяти, если захватывали ее
delete s;
}
Если в классе не описан ни один конструктор, то при описании объектов этого класса нельзя указывать параметры. Если же описан хотя бы один конструктор, то описание объекта должно соответствовать одному из имеющихся конструкторов.
Особое место среди конструкторов занимает конструктор копирования, который позволяет при создании нового объекта присваивать ему значение другого объекта. При описании такого конструктора в типе параметра необходимо использовать ссылки на объект данного класса, а не сам объект.
Кроме обычных функций в классах принято также описывать перегрузку операций, которые являются разновидностью функций, а отличаются только формой использования. Это связано с тем, что для новых классов заранее определена только операция присваивания. Но и она правильно работает не для всех типов классов, и ее тоже часто переопределяют.
Для обращения к членам (элементам, полям) объектов используются операции . (точка) и -> (стрелка). Первая операция позволяет по имени объекта и имени члена получить доступ к значению поля, а вторая - по адресу объекта и имени члена. Если этот член в свою очередь является составным объектом, к нему также могут применяться соответствующие операции доступа.