
- •Лекция №1 «Современные средства разработки по. Терминология. Основные понятия.»
- •Проектирование приложения.
- •Реализация программного кода приложения.
- •Тестирование приложения.
- •Лекция 2. История развития ооп и сред rad
- •Преимущества ооп
- •Среды разработки, использующие принципы rad
- •Лекция №3 ооп. Понятия объекта, свойства, метода, события.
- •Лекция №4 Классы
- •4.1 Объявление класса
- •4.2. Перегрузка функций.
- •4.3. Конструкторы.
- •4.4. Деструкторы.
- •4.5. Конструкторы с параметрами.
- •4.6. Указатели на объекты.
- •Лекция №5 Данные-элементы, статические данные, константные данные
- •6. Функции-элементы, дружественные функции, константные функции
- •Inline void SetA(int); // функция записи
- •Встраиваемые функции inline
- •3.3. Введение в наследование.
- •Виртуальные функции.
- •Производные классы: множественное наследование
4.6. Указатели на объекты.
Доступ к члену объекта возможен не только через точку (.). Возможен доступ и через указатель на этот объект. В этом случае применяют стрелку (->).
Пример:
#include <iostream.h>
class myclass {
int a;
public:
myclass();//
myclass(int x); // конструктор
int get();
};
myclass::myclass()
{
a=0;
}
myclass::myclass(int x)
{
a = x;
}
int myclass::get()
{
return a;
}
main()
{
myclass ob(120); // создание объекта
myclass *p; // создание указателя на объект
p = &ob; // передача адреса ob в p
cout << "Значение, получаемое при использовании объекта:" << ob.get();
cout << "\n";
cout << "Значение, получаемое при использовании указателя:" << p->get();
myclass *pn; // указатель на класс типа А
pn=new myclass;//создание экземпляра класса
float x=pn->get();//доступ по указателю
delete pn;
return 0;
}
В программе объявление myclass *p создает указатель на объект myclass(а не создает объект!).
Для передачи адреса ob в p используется выражение p=&ob.
Для получения доступа к объекту через указатель используется выражение p->get();
В случае необходимости создания и удаления объекта можно использовать операции new и delete.
Лекция №5 Данные-элементы, статические данные, константные данные
Каждый объект класса имеет свою собственную копию всех данных-элементов класса. Но в определенных случаях во всех объектах класса должна фигурировать только одна копия некоторых данных. Например, это может быть счетчик числа созданных объектов класса (например счетчик окон в многооконном приложении).
Единственную копию данных необходимо иметь, например, если в классе имеются некоторые константы, одинаковые для всех объектов класса. В этом случае нерационально хранить в каждом объекте собственные копии этих констант. Рациональнее иметь единственные экземпляры этих констант для всех объектов (например значения физических констант).
Для введения в класс подобных данных используются статические данные, которые содержат информацию «для всего класса». Объявление статических элементов в классе начинается с ключевого слова static. Например:
static int D;
Статические элементы могут быть открытыми, закрытыми или защищенными. Доступ к открытым статическим элементам класса возможен посредством любого объекта класса или посредством имени класса с помощью бинарной операции разрешения области действия. Например:
MyClass::D = 10;
Закрытые и защищенные статические элементы класса должны быть доступны открытым функциям-элементам этого класса или дружественным функциям и классам.
Статические элементы класса существуют даже тогда, когда не существует никаких объектов этого класса (!). В этом случае доступ к открытому статическому элементу обеспечивается так же с помощью имени класса и бинарной операции разрешения области действия. Для обеспечения доступа в отсутствие объектов к закрытому или защищенному элементу класса должна быть предусмотрена открытая статическая функция-элемент, которая должна вызываться с добавлением перед ее именем имени класса и бинарной операции разрешения области действия.
MyClass::GetD();
Начальные значения статических элементов (как открытых, так и закрытых) должны задаваться вне объявления класса. Для этого достаточно разместить где-то в файле, например, после объявления класса или среди реализаций функций-элементов (но не внутри их) оператор вида
int MyClass::D = 0;
Статическим данным-элементам можно задать начальные значения один и только один раз в области действия файл. Если нигде не инициализировали статический элемент данных, будет выдано сообщение компилятора о неразрешенной внешней ссылке и программа не будет скомпилирована. Если дважды инициализируется статический элемент, будет выдано сообщение о дублировании инициализации и программа также не будет скомпилирована.
Приведем пример, демонстрирующий все сказанное относительно статических данных-элементов:
class MyClass
{
public:
static int D;
static int GetDl(void);
…
private:
static int Dl;
…
};
int MyClass::GetDl(void) {return Dl;}
int MyClass::D = 0;
int MyClass::Dl = 1;
В этом примере имеются два статических элемента данных: открытый D и закрытый D1. Если пользователь должен иметь возможность получать значение закрытой статической переменной D1, то должна быть предусмотрена функция ее чтения, названная в примере GetDl. Она должна быть объявлена открытой (public) и статической (со спецификатором static). Статической может быть объявлена любая функция, работающая только со статическими данными.
После объявления класса в примере расположена реализация функции GetDl. В реализации не требуется указывать спецификатор static. Далее приведены операторы, инициирующие открытые и закрытые статические данные. В дальнейшем можно из любой внешней функции обращаться к ним с помощью операции разрешения области действия. Например:
i=MyClass::D;
j=MyClass::GetDl() ;
Использование статических членов класса может заметно снизить потребность в глобальных переменных, применение которых нежелательно в принципе.
Среди данных — элементов могут быть объявлены именованные константы (их значение не может изменяться после инициализации). Например:
static const int MaxA = 10;
const int MinA;
Значения статических именованных констант могут задаваться в момент их объявления в классе.
Инициализация нестатических констант — вопрос более сложный, связанный с построением конструкторов.
Например, в объявлении класса была константа
const int A;
то конструктор дополняется инициализатором элементов
MyClass::MyClass():A(10)
{
//тело конструктора
}
Задаст значение А равным 10 при создании объекта.
Для изменения нестатической константы при создании объекта необходимо использовать конструктор с параметрами
MyClass::MyClass(int i):A(i)
{
//тело конструктора
}