- •Міністерство освіти і науки україни
- •Розділ 1. Інкапсуляція та приховування інформації
- •1.1 Визначення та використання класів
- •1.2. Поля і методи класів
- •1.2.1 Поля і методи класів
- •1.2.2 Опис об’єктів
- •1.2.3 Вказівка this
- •Void cure(int health, int ammo)
- •1.3 Інкапсуляція та приховування інформації
- •1.3.1. Приховані дані
- •1.3.2. Загальнодоступні і приватні члени класу
- •1.3.3. Захищені члени класу
- •Void b::fb()
- •Void c::fc()
- •Void c::fc(a&a)
- •Void main()
- •1.3.4. Організація загального інтерфейсу
- •Void main()
- •1.4 Конструктори і деструктори
- •Void main()
- •Завдання
- •Розділ 2. Класи і підкласи
- •2.1. Конструктор копіювання
- •2.2 Вкладені класи
- •Void External::Inner::MethodInner(const External &t)
- •2.3 Статичні елементи класу
- •2.3.1 Статичні поля
- •2.3.2 Статичні методи
- •Void f()
- •2.4 Дружні функції і класи
- •2.4.1 Дружня функція
- •Void Spouse(Person &p)
- •Void main()
- •2.4.2 Дружній клас
- •Завдання
- •Розділ 3. Спадкування класів
- •3.1 Спадкування класів
- •Void b::bb(int u)
- •Void main()
- •Приклад.
- •Void main()
- •Void main()
- •Void main()
- •3.2 Множинне спадкування
- •Void main()
- •Void main()
- •3.3. Типовий приклад спадкування
- •Void DatabaseObject::Display ( )
- •Завдання
- •Розділ 4. Поліморфізм
- •4.1. Віртуальні функції
- •Void main()
- •Void main()
- •4.2 Абстрактні класи
- •Void show(a* a)
- •Void main()
- •4.3. Приклади поліморфізму
- •Virtual double f1()
- •Void main()
- •4.4. Внутрішнє представлення об’єктів і таблиця методів
- •Void do_(a& a)
- •Void main()
- •Void show(a* a)
- •Void main()
- •Завдання
- •Розділ 5. Перевантаження операторів
- •5.1 Загальні відомості
- •5.2 Перевантаження унарних операторів
- •Int geth()
- •Void set_h (int h)
- •5.3 Перевантаження бінарних операторів та операторів присвоювання
- •Void main()
- •5.4 Перевантаження операторів new і delete
- •Void * pObj::operator new(size_t size)
- •Void pObj::operator delete(void* ObjToDie, size_t size)
- •5.5 Перевантаження оператору приведення типу
- •Operator ім’я нового типу ();
- •5.6 Перевантаження оператору виклику функції
- •5.7 Перевантаження оператору індексування
- •Vect::Vect (int n): size(n)
- •Завдання
- •Розділ 6. Обробка виключних ситуацій
- •6.1 Загальні відомості про виключні ситуації
- •6.2 Синтаксис виключень
- •6.3 Перехоплення виключень
- •Void f1()
- •Void f2()
- •Void main()
- •Void GotoXy(int X, int y)
- •Void kontr (char* str) throw (const char*)
- •Void main()
- •Void MyFunc()
- •Void main()
- •6.4 Список виключень функції
- •6.5 Виключення в конструкторах та деструкторах
- •6.6 Ієрархії виключень
- •Завдання
- •Розділ 7. Рядки
- •Void main ()
- •7.1.1 Конструктори і операції привласнення
- •7.1.2 Операції
- •7.2. Функції класу string
- •7.2.1 Привласнення і додавання частин рядків
- •7.2.2 Перетворення рядків
- •Void main ()
- •7.2.3 Пошук підрядків
- •Void main()
- •7.2.3 Порівняння частин рядків
- •Void main ()
- •7.2.4 Отримання характеристик рядків
- •Завдання
- •Розділ 8. Шаблони класів
- •8.1. Загальна характеристика динамічних структур даних
- •8.2. Стек
- •Void main()
- •Void push(Node **top, int d)
- •Int pop (Node **top)
- •8.3. Черга
- •Void main()
- •Void add(Node **pend, int d)
- •Int del(Node **pbeg)
- •8.4. Лінійний список
- •Void main()
- •Void add(Node **pend, int d)
- •8.5. Шаблони функцій
- •Void main()
- •Void myfunc(type1 X, type2 y)
- •Void main()
- •8.6 Загальні відомості шаблонів класів
- •Void List ::print()
- •Void List::print_back()
- •Void main()
- •8.7 Створення шаблонів-класів
- •Void main()
- •8.8 Спеціалізація шаблонів класів
- •8.9 Переваги та недоліки шаблонів
- •Завдання
- •Розділ 9. Модульні програми (проектування об’єктно-орієнтованого програмування)
- •9.1 Короткі відомості
- •9.2 Збірка вихідних текстів
- •Void main()
- •9.3 Відділення інтерфейсу від реалізації
- •9.4 Шаблони та модульність. Простір імен
- •9.5 Фізичне розділення простору імен
- •9.6 Міжмодульні змінні та функції
- •9.7 Ініціалізація глобальних об'єктів
- •Завдання
- •Розділ 10. Контейнерні класи
- •10.1 Загальні відомості
- •10.2 Послідовні контейнери
- •Void main()
- •10.2.1 Вектори (vector)
- •Void main()
- •Void main()
- •10.2.2. Двосторонні черги (deque)
- •10.2.3 Списки (list)
- •Void main()
- •Void main()
- •10.2.4 Стеки (stack)
- •Void main()
- •10.2.5 Черги (queue)
- •Void main()
- •Void main()
- •10.2.6 Черги з пріоритетами (priority_queue)
- •Void main()
- •Void main()
- •10.3 Асоціативні контейнери
- •10.3.1 Загальні відомості про асоціативні контейнери
- •Void main()
- •10.3.2 Словники (map)
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •10.3.3 Множини (set)
- •Void main()
- •Void main()
- •Завдання
- •Розділ 11. Алгоритми
- •11.1 Ітератори
- •11.2 Функціональні об'єкти
- •Void main()
- •Void main()
- •11.3 Алгоритми
- •11.3.1 Немодифікуючі операції з послідовностями
- •Void main ()
- •Void main()
- •Void main()
- •11.3.2 Модифікуючі операції з послідовностями
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •11.3.3 Алгоритми, пов'язані з сортуванням
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •11.3.4 Узагальнені чисельні алгоритми
- •Void main()
- •Void main()
- •Завдання
- •Список літератури
Void main()
{
mp ob;
str struc;
struc.a = 100;
struc.dd = "aaa";
int num;
for(int i=1; i<5;i++)
{
struc.a = 100*i;
struc.dd += (char)(i+65);
ob[i] = struc;
}
mp::iterator it;
for( it = ob.begin(); it != ob.end(); it++)
cout <<(*it).first<<" "<<((*it).second).a <<
" "<<((*it).second).dd << endl;
it = ob.begin(); it++; // Вывод второго элемента
cout << "2 - element: ";
cout<<(*it).first <<" "<<((*it).second).dd<<endl;
str vs;
vs.a = 88;
vs.dd = "TTT";
ob.insert(make_pair(200,vs));
for( it = ob.begin(); it != ob.end(); it++)
cout <<(*it).first <<" "<<((*it).second).a
<< " "<<((*it).second).dd << endl;
}
Результат роботи програми:
1 100 aaaB
2 200 aaaBC
3 300 aaaBCD
4 400 aaaBCDE
2 - element: 2 aaaBC
1 100 aaaB
2 200 aaaBC
3 300 aaaBCD
4 400 aaaBCDE
200 88 TTT
10.3.3 Множини (set)
Множина – це асоціативний контейнер, що містить тільки значення ключів, тобто тип value_type відповідає типу Кеу. Значення ключів мають бути унікальні. Шаблон множини має два параметри: тип ключа і тип функціонального об'єкту, що визначає відношення "менше":
template <class Key, class Compare = less<Key> >
class set
{
public:
typedef Key key_type;
typedef Key value_type;
explicit set(const Compare& comp = Compare());
template <class InputIter>
set(InputIter first, InputIter last,
const Compare& comp = Compare());
set(const set<Key, Compare>& x);
pair<iterator,bool> insert(const value_type& x);
iterator insert(iterator position,const value_type&x);
template <class InputIter>
void insert(InputIter first , InputIter last);
void erase(iterator position);
size_type erase(const key_type& x);
void erase(iterator first , iterator last);
void swap(set<Key, Compare>&);
void clear();
iterator find(const key_type& x) const;
size_type count(const key_type& x) const;
iterator lower_bound(const key_type& x) const;
iterator upper_bound(const key_type& x) const;
pair<iterator.iterator> equal_range
(const key_type& x) const;
...
}
З опису, приведеного з скороченнями, видно, що інтерфейс множини аналогічний інтерфейсу словника. Нижче приведений простий приклад, в якому створюється множина цілих чисел:
#include <iostream>
#include <set>
using namespace std;
typedef set<int,less<int> > seti;
seti::iterator i;
Void main()
{
int a[4] = {4,2,1,2};
// Створюється порожня множина
seti s1;
// Множина створюється копіюванням масиву
seti s2(a, a + 4);
seti s3(s2);// Працює конструктор копіювання
s2.insert(10);// Вставка елементів
s2.insert(6);
for ( i = s2.begin(); i != s2.end();i++)
cout << *i << " " ;
cout << endl;
// Змінна для зберігання результату equal_range;
pair <seti::iterator, seti::iterator > p;
p = s2.equal_range(2);
cout << *(p.first) <<" "<< *(p.second) << endl;
p = s2.equal_range(5);
cout << *(p.first) <<" "<< *(p.second) << endl;
}
Результат роботи програми:
1 2 4 6 10
2 4
6 6
Як і для словника, елементи в множині зберігаються відсортованими. Елементи, що повторюються, в множину не заносяться.
Приведена нижче програма формує для заданого текстового файлу вказівку, тобто впорядкований за абеткою список слів, що зустрічаються в ньому, для кожного з яких показані номери рядків, що містять це слово. Якщо слово зустрічається в рядку більше одного разу, номер рядка виводиться один раз.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <set>
#include <map>
using namespace std;
typedef set<int, less<int> > set_i;
typedef map<string, set_i, less<string> > map_ss;
bool wordread (ifstream &in,string &word, int &num)
{
char ch;
// Пропуск до першої букви:
for (;;)
{
in.get(ch);
if (in.fail()) return false;
if (isalpha(ch) || ch == '_') break;
if (ch == '\n') num++;
}
word = "";
// Пошук кінця слова:
do
{
word += tolower(ch);
in.get(ch);
}
while (!in.fail() && (isalpha(ch) || ch == '_'));
if (in.fail()) return false;
in.putback(ch); // Якщо символ – '\n'
return true;
}