- •Министерство образования рф
- •Глава 2. Наследование, полиморфизм и виртуальные функции
- •1.2. Доступность компонентов класса
- •1.3. Конструктор и деструктор
- •1.4. Компоненты-данные и компоненты-функции
- •1.4.1. Данные - члены класса.
- •1.4.2.Функции - члены класса.
- •1.4.3.Константные компоненты-функции.
- •1.4.4. Статические члены класса
- •1.5.1.Указатели на компоненты- данные.
- •1.5.2.Указатели на компоненты- функции.
- •1.6. Указатель this
- •1.7. Друзья классов
- •7.1. Дружественная функция
- •1.7.2. Дружественный класс
- •1.8. Определение классов и методов классов.
- •1.9. Упражнения.
- •Глава 2. Наследование.
- •2.1. Определение производного класса.
- •2.2.Конструкторы и деструкторы производных классов
- •2.4.Абстрактные классы
- •2.5.Включение объектов.
- •2.6.Включение и наследование .
- •2.7. Множественное наследование
- •2.8. Локальные и вложенные классы
- •Глава 3. Перегрузка операций
- •3.1. Перегрузка унарных операций
- •3.2. Перегрузка бинарных операций
- •3.4. Перегрузка операции вызова функции
- •3.5. Перегрузка операции присваивания
- •3.6. Перегрузка операции new.
- •3.6.1.Синтаксис
- •3.6.2.Правила использования операции new.
- •3.6.3.Обработка ошибок операции new.
- •3.7. Перегрузка операции delete.
- •3.8. Основные правила перегрузки операций.
- •3.9. Упражнения
Министерство образования рф
Пермский государственный технический университет
Ноткин А.М.
Алгоритмические языки и технология программирования
Часть 3. Объектно-ориентированное программирование на С++
(конспект лекций)
Содержание
Предисловие
Глава 1. Классы С++
Новый тип данных- класс.
Доступность компонентов класса.
Конструктор и деструктор.
Компоненты- данные и компоненты- функции.
Данные- члены класса.
Функции- члены класса.
Константные компоненты класса.
Статические члены класса.
1.5. Указатель на компоненты класса.
Указатель на компоненты- данные.
Указатель на компоненты- функции.
Указатель this.
Друзья классов.
Дружественная функция.
Дружественный класс.
Определение классов и методов классов.
Упражнения.
Глава 2. Наследование, полиморфизм и виртуальные функции
Определение производного класса
Конструкторы и деструкторы производных классов
Виртуальные функции
Абстрактные классы
Включение объектов
Включение и наследование
Множественное наследование
Локальные и вложенные классы
Упражнения
Глава 3. Перегрузка операций
Перегрузка унарных
Перегрузка бинарных операций
Перегрузка операций ++ и --
Перегрузка операции вызова функции
Перегрузка операции присваивания
Перегрузка операции new
Перегрузка операции delete
Основные правила перегрузки операций
Упражнения
Глава 4. Шаблоны функций и классов
Глава 5. Обработка исключительных ситуаций
Глава 6. Потоковые классы
Глава 7. Пространство имен и динамическая идентификация типов
Глава 8. Стандартная библиотека шаблонов
Ответы на вопросы и решение упражнений
Глава 1. Классы С++.
Новый тип данных - класс.
Целью введения концепции классов в С++ является предоставление программисту средств создания новых типов, которые настолько же удобны в использовании, как и встроенные типы. Тип является конкретным представлением некоторой концепции. Например, встроенный тип С++ float вместе с операциями +,-,* и т.д. является воплощением математической концепции вещественного числа. Класс- это определенный пользователем тип. Мы создаем новый тип для определения концепции, не выражаемой непосредственно встроенными типами. Например, мы могли бы ввести тип TrunkLine (междугородная линия) в программе, имеющей отношение к телефонии, тип Depositir (вкладчик) в программе управления банком или тип Pretator (хищник) в программе экологического моделирования.
Класс - фундаментальное понятие С++ и лежит в основе многих свойств С++. Класс предоставляет механизм для создания объектов. В классе отражены важнейшие концепции объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм).
С точки зрения синтаксиса класс в С++ - это структурированный тип, образованный на основе уже существующих типов.
В этом смысле класс является расширением понятия структуры. В простейшем случае класс можно определить с помощью конструкции:
тип_класса имя_класса{список_членов_класса};
где
тип_класса – одно из служебных слов class, struct, union;
имя_класса – идентификатор;
список_членов_класса – определения и описания типизированных данных и принадлежащих классу функций.
Функции – это методы класса, определяющие операции над объектом.
Данные – это поля объекта, образующие его структуру. Значения полей определяет состояние объекта.
Мы будем называть члены класса компонентами класса, различая компонентные данные и компонентные функции.
Пример 1.1.1
struct date //дата
{int month,day,year; // поля: месяц, день, год
void set(int,int,int); // метод - установить дату
void get(int*,int*,int*); // метод- получить дату
void next(); // метод- установит следующую дату
void print(); // метод - вывести дату
};
Пример 1.1.2.
struct complex // комплексное число
{double re,im;
double real(){return(re);}
double imag(){return(im);}
void set(double x,double y){re = x; im = y;}
void print(){cout<<”re = ”<<re; cout<<“im = ”<<im;}
};
Для описания объекта класса (экземпляра класса) используется конструкция
имя_класса имя_объекта
date today,my_birthday;
date *point = &today; //указатель на объект типа date
date clim[30]; // массив объектов
date &name = my_birthday; //ссылка на объект
В определяемые объекты входят данные, соответствующие членам-данным класса. Функции- члены класса позволяют обрабатывать данные конкретных объектов класса. Обращаться к данным объекта и вызывать функции для объекта можно двумя способами. Во-первых, с помощью “квалифицированных” имен:
имя_объекта.имя_класса : : имя_данного
имя_объекта.имя_класса : : имя_функции
Имя класса может быть опущено
имя_объекта.имя_данного
имя_объекта.имя_функции
Например:
класс “комплексное число”
complex x1,x2;
x1.re = 1.24;
x1.im = 2.3;
x2.set(5.1,1.7);
x1.print();
Второй способ доступа использует указатель на объект
указатель_на_объект–>имя_компонента
complex *point = &x1; // или point = new complex;
point –>re = 1.24;
point –>im = 2.3;
point –>print();
Пример 1.1.3.
Класс “товары”
int percent=12; // наценка
struct goods
{char name[40];
float price;
void Input()
{cout<<“наименование: ”;
cin>>name;
cout<<“цена: ”;
cin>>price;}
void print()
{cout<<“\n”<<name;
cout<<“, цена: ”;
cout<<long(price*(1.0+percent*0.01));}
};
void main(void)
{ goods wares[5];
int k = 5;
for(int i = 0; i < k; i++) wares[i].Input();
cout<<“\nСписок товаров при наценке ”<<percent<<“ % ”;
for(i = 0; i < k; i++) wares[i].print();
percent = 10;
cout<<“\nСписок товаров при наценке ”<< percent<<” % ”;
goods *pGoods = wares;
for(i = 0; i < k; i++) pGoods++–>print();
}