Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
92
Добавлен:
10.12.2013
Размер:
427.01 Кб
Скачать

55

Министерство образования рф

Пермский государственный технический университет

Ноткин А.М.

Алгоритмические языки и технология программирования

Часть 3. Объектно-ориентированное программирование на С++

(конспект лекций)

Содержание

Предисловие

Глава 1. Классы С++

  1. Новый тип данных- класс.

  2. Доступность компонентов класса.

  3. Конструктор и деструктор.

  4. Компоненты- данные и компоненты- функции.

  1. Данные- члены класса.

  2. Функции- члены класса.

  3. Константные компоненты класса.

  4. Статические члены класса.

1.5. Указатель на компоненты класса.

  1. Указатель на компоненты- данные.

  2. Указатель на компоненты- функции.

  1. Указатель this.

  2. Друзья классов.

  1. Дружественная функция.

  2. Дружественный класс.

  1. Определение классов и методов классов.

  2. Упражнения.

Глава 2. Наследование, полиморфизм и виртуальные функции

  1. Определение производного класса

  2. Конструкторы и деструкторы производных классов

  3. Виртуальные функции

  4. Абстрактные классы

  5. Включение объектов

  6. Включение и наследование

  7. Множественное наследование

  8. Локальные и вложенные классы

  9. Упражнения

Глава 3. Перегрузка операций

  1. Перегрузка унарных

  2. Перегрузка бинарных операций

  3. Перегрузка операций ++ и --

  4. Перегрузка операции вызова функции

  5. Перегрузка операции присваивания

  6. Перегрузка операции new

  7. Перегрузка операции delete

  8. Основные правила перегрузки операций

  9. Упражнения

Глава 4. Шаблоны функций и классов

Глава 5. Обработка исключительных ситуаций

Глава 6. Потоковые классы

Глава 7. Пространство имен и динамическая идентификация типов

Глава 8. Стандартная библиотека шаблонов

Ответы на вопросы и решение упражнений

Глава 1. Классы С++.

  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();

}

Соседние файлы в папке II cemecTP