- •Объектно-ориентированное программирование:
- •Содержание
- •Новый тип данных – класс
- •1.2. Доступность компонентов класса
- •1.3. Конструктор и деструктор
- •1.4.4. Статические члены класса
- •1.4. Компоненты-данные и компоненты-функции
- •1.4.1. Данные – члены класса
- •1.4.2. Функции – члены класса
- •1.4.3. Константные компоненты-функции
- •Указатели на компоненты класса
- •1.5.1. Указатели на компоненты-данные
- •1.5.2.Указатели на компоненты-функции
- •1.6. Указатель this
- •1.7. Друзья классов
- •7.1. Дружественная функция
- •1.7.2. Дружественный класс
- •1.8. Определение классов и методов классов
- •2. Наследование
- •2.1. Определение производного класса
- •2.2. Конструкторы и деструкторы производных классов
- •2.3. Виртуальные функции
- •2.4. Абстрактные классы
- •2.5. Включение объектов
- •2.6. Включение и наследование
- •2.7. Множественное наследование
- •2.8. Локальные и вложенные классы
- •2.9. Пример программы для Microsoft Visual Studio
- •2.10. Упражнения
- •3. Перегрузка операций
- •3.1. Перегрузка унарных операций
- •3.2. Перегрузка бинарных операций
- •3.4. Перегрузка операции вызова функции
- •3.5. Перегрузка операции присваивания
- •3.6. Перегрузка операции new
- •3.7. Перегрузка операции delete.
- •3.8. Основные правила перегрузки операций
- •3.9. Примеры программ
- •4. Шаблоны функций и классов
- •4.1. Шаблоны функций
- •4.2. Шаблоны классов
- •4.3. Компонентные функции параметризованных классов
- •4.4. Примеры программ.
- •5. Обработка исключительных ситуаций
- •5.2. Получение дополнительной информации об исключении
- •5.3. Определение типа исключения
- •5.4. Иерархия исключений
- •5.5. Спецификация функций, обрабатывающих исключения
- •6. Потоковые классы
- •6.1. Библиотека потоковых классов
- •6.3. Стандартные потоки ввода-вывода
- •6.4. Форматирование
- •6.5. Манипуляторы
- •6.6. Ввод-вывод объектов пользовательских классов
- •6.7. Определение пользовательских манипуляторов
- •6.8. Пользовательские манипуляторы с параметрами
- •6.9. Использование макросов для создания манипуляторов
- •6.10. Состояние потока
- •6.11. Неформатированный ввод-вывод
- •6.12. Файловый ввод-вывод
- •7.1. Пространство имен
- •7.2. Динамическая идентификация типов
- •7.3. Безопасное приведение типа
- •8. Стандартная библиотека шаблонов
- •8.1. Введение в stl
- •Парадигму обобщенного программирования можно сформулировать следующим образом:
- •8.2. Итераторы
- •8.3. Классы-контейнеры
- •Iterator find(const key_type&k)
- •Iterator lower_bound(const key_type&k)
- •Iterator upper_bound(const key_type&k)
- •8.4. Контейнер vector
- •8.5. Многомерные массивы
- •8.6. Ассоциативные контейнеры
- •8.7. Объекты-функции
- •8.8. Алгоритмы
- •I. Немодифицирующие операции
- •II. Модифицирующие операции
- •III. Сортировка
- •IV. Работа с множествами
- •V. Минимумы и максимумы
- •VI. Перестановки
2.9. Пример программы для Microsoft Visual Studio
Задание: создать иерархию классов – персона, студент, преподаватель и класс «список», хранящий объекты этих классов.
Файл list.h–Определение классов
Абстрактный класс Person содержит абстрактные(чистые виртуальные) функции Show() и Input(), которые должны быть определены в производных классах. В классе Person объявлен дружественный ему класс List.
class Person
{
public:
Person();
Person(char*,int );
virtual~Person(){};
virtual void Show()=0; //показать объект
virtual void Input()=0; //ввести значения данных объекта
friend class List;
protected:
char name[20]; //имя персоны
int age; //возраст персоны
Person* next; //указатель на следующий объект в списке
};
class Student:public Person{
public:
Student();
Student(char* NAME,int AGE,float GRADE);
void Show();
void Input();
protected:
float grade; //рейтинг
};
class Teacher:public Person{
public:
Teacher();
Teacher(char* NAME,int AGE,int WORK);
void Show();
void Input();
protected:
int work; //рабочий стаж
};
class List
{
private:
Person* begin; //указатель на начало списка
public:
List();
~List();
void Insert(Person*); //вставить в список объект
void Show(); //показать весь список
};
Файл person.cpp – Определение функций класс Person
#include<stdlib.h>
#include<iostream.h>
#include<string.h>
#include"list.h"
Person::Person()
{strcpy(name,"NONAME");
age=0;
next=0;};
Person::Person(char*NAME,int AGE)
{
strcpy(name,NAME);
age=AGE;
next=0;}
Файл student.cpp–Определение функций класса Student
#include<stdlib.h>
#include<iostream.h>
#include<string.h>
#include"list.h"
Student::Student()
{grade=0;}
Student::Student(char* NAME,int AGE,float GRADE) :Person(NAME,AGE)
{
grade=GRADE;
next=0;
}
void Student::Show(){cout<<"name="<<name<<" age="<<age<<" grade="<<grade<<endl;}
void Student::Input()
{
cout<<"name=";cin>>name;
cout<<"age=";cin>>age;
cout<<"grade=";cin>>grade;
}
Файл teacher.cpp– Определение функций класса Teacher
#include<stdlib.h>
#include<iostream.h>
#include<string.h>
#include"list.h"
Teacher::Teacher()
{work=0;}
Teacher::Teacher(char* NAME,int AGE,int WORK):Person(NAME,AGE)
{
work=WORK;
next=0;
}
void Teacher::Show(){cout<<"name="<<name<<" age="<<age<<" work="<<work<<endl;}
void Teacher::Input()
{
cout<<"name=";cin>>name;
cout<<"age=";cin>>age;
cout<<"work=";cin>>work;
}
Файл list.cpp–Определение функций класса List
#include<stdlib.h>
#include<iostream.h>
#include<string.h>
#include"list.h"
List::List(){begin=0;} //создается пустой список
List::~List(){
Person*r;
//проходим по списку и удаляем каждый объект
while(begin!=0){
r=begin;
begin=begin->next;
delete r;}}
void List::Insert(Person*p){
Person *r;
//вставляем объект в начало списка
r=begin;
begin=p;
p->next=r;}
void List::Show()
{Person *r;
r=begin;
//проходим по списку и вызываем для каждого объекта
//его виртуальную функцию Show
while(r!=0)
{r->Show();
r=r->next;}
}
Файл main.cpp–Демонстрационная программа
#include<iostream.h>
#include"list.h"
#include<process.h>
int main()
{
List list;
Student* ps;
Teacher* pt;
ps=new Student("Ivanov",21,50.5);
list.Insert(ps);
pt=new Teacher("Petrov",34,10);
list.Insert(pt);
ps=new Student;
ps->Input();
list.Insert(ps);
pt=new Teacher;
pt->Input();
list.Insert(pt);
list.Show();
system("pause");
return 0;
}
