
- •«Объектно-ориентированный анализ и проектирование»
- •1. Принципы ооп. Классы.
- •Описание классов.
- •Объекты класса.
- •Конструкторы
- •Конструктор копирования
- •Статические элементы класса
- •Дружественные функции и классы
- •Деструкторы
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Рекомендации по составу классов
- •2. Наследование
- •Ключи доступа
- •Простое наследование
- •Пример замещения функций (практикум)
- •Виртуальные методы
- •Множественное наследование
- •3. Отношения между классами. Диаграммы класссов на языке uml.
- •4. Шаблоны классов.
- •4.1. Определения шаблонов классов Queue и QueueItem
- •4.2. Конкретизация шаблона класса
- •4.3. Аргументы шаблона для параметров-констант
- •4.4. Функции-члены шаблонов классов
- •5. Обработка исключительных ситуаций
- •5.1. Общий механизм обработки исключений.
- •5.2 . Синтаксис исключений
- •5.3. Перехват исключений
- •5.4. Исключения в конструкторах и деструкторах
- •Vector(int n) // Конструктор
- •5.5. Список исключений функции.
- •6. Строки
- •Преобразование строк
- •7. Контейнерные классы
- •7.1. Векторы.
- •7.2. Двухсторонние очереди (deque).
- •7.3. Списки (List).
- •7.4. Стеки
- •7.5. Очереди (queue)
- •7.6. Очередь с приоритетами(priority_queue)
- •8. Ассоциативные контейнеры
- •8.1. Словари (map)
- •8.2. Словари с дубликатами (multimap)
- •8.3. Множества (set)
- •8.4. Множества с дубликатами (multiset)
- •8.5. Битовые множества (bitset)
Описание классов.
Данные класса – поля, функции – методы.
class <имя>{
[private:]
<описание скрытых элементов>
public:
<описание доступных элементов>
};
Поля класса:
могут иметь любой тип, кроме типа этого же класса;
могут быть описаны с модификатором const (инициализируется через конструктор лишь один раз);
могут быть описаны с модификатором static.
Классы могут быть глобальными и локальными.
class monstr{
int health,ammo;
public:
monstr(int he=100, int am=10)
{health = he;
ammo = am;}
;
void draw( int x, int y, int scale, int position);
int get_health()
{return health;}
int get_ammo()
{return ammo;}
};
Метод, тело которого определено внутри класса, - встроенный.
Операция доступа к области видимости – « :: » .
void monstr::draw(int x, int y, int scale, int position)
{/*тело метода*/}
Метод может быть определен как встроенный и вне класса:
inline int monstr:: get_ammo()
{return ammo;}
Объекты класса.
monstr Vasia,
Super(200,300),
stado[100],
*beavis = new monstr (10,20),
&butthead = Vasia;
int n= Vasia.get_ammo();
stado[5].draw(1,2,3,4);
cout << '\n'<<beavis->get_health() <<
'\n' << butthead.get_health()<< '\n'<<n;
У константного объекта значения полей менять нельзя, к нему можно применять лишь константные методы:
class monstr {
int health,ammo;
public:
monstr_const(int he=100, int am=10)
{health = he;
ammo = am;}
void draw( int x, int y, int scale, int position);
int get_health() const
{return health;}
int get_ammo()
{return ammo;}
};
…
const monstr Dead(0,0);
cout << '\n'<< Dead.get_health();
Константный метод:
объявляется с ключевым словом const после списка параметров;
не может изменять значения полей класса;
может вызывать только константные методы;
может вызываться для любых объектов.
Указатель this
хранит константный указатель на вызвавший функцию объект и используется внутри метода для ссылок на элементы объекта.
class monstr{
int health,ammo;
public:
monstr(int he=100, int am=10);
void draw( int x, int y, int scale, int position);
int get_health()
{return health;}
int get_ammo()
{return ammo;}
monstr &the_best( monstr &M)
{ if (health > M.health)
return *this;
return M;
}
};
monstr::monstr(int he, int am)
{health = he;
ammo = am;
}
void main()
{
monstr Vasia, Super(200,300;
monstr Best = Vasia.the_best(Super);
cout << '\n'<< Best.get_health();
}
This применяется для идентификации поля класса (при описании метода, когда имя поля совпадает с именем формального параметра метода). Иначе можно использовать операцию доступа к области видимости:
class monstr{
int health,ammo;
color skin;
char *name;
public:
…
void cure(int health, int ammo)
{ this->health +=health;
monstr::ammo += ammo;
}
};
...
monstr Best = Vasia.the_best(Super);
Best.cure(13, 18);
cout << '\n'<< Best.get_health();