Файл: Информация и формы ее представления Информационные процессы и технологии.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 281
Скачиваний: 1
СОДЕРЖАНИЕ
1.3. ЭВМ как средство обработки информации
1.1 Информация и формы ее представления
1.2 Информационные процессы и технологии
1.3 ЭВМ как средство обработки информации
Структура и принципы функционирования ЭВМ
Основные характеристики вычислительной техники
Перспективы развития вычислительных средств
2.4 Операционная система MS-DOS
Файловая структура логического диска
Раздел 3 Основные принципы программирования
3.1. Этапы подготовки и решения задач на ЭВМ
3.2. Алгоритмы и способы их описания
3.3. Компиляция и интерпретация программ
3.1 Этапы подготовки и решения задач на ЭВМ
3.2 Алгоритмы и способы их описания
3.3. Компиляция и интерпретация программ
Раздел 9 Объектно-ориентированное программирование
int main(int argc, char *argv[])
{
Counter c1, c2(3);
CountDown c3;
std::cout<
std::cout<
std::cout<
c1.inc_count(); c2.inc_count();
c3.dec_count();
std::cout<
std::cout<
std::cout<
return 0;
}
Для объекта c3 доступен новый метод: c3.dec_count();
Но можно применять и унаследованные методы, например:
std::cout<
Можно добавить в программу еще две строчки:
c3.inc_count();
std::cout<<"!!!"<
Тогда значение счетчика с3 увеличится!
Переменная с3 – это объект класса CountDown. В классе CountDown нет конструктора. Если в производном классе не определен конструктор, то используется конструктор базового класса без параметров.
Но мы не сможем воспользоваться конструктором с параметром из базового класса.
Поэтому, если возникает необходимость инициализации объекта с3 каким-либо другим значением, мы должны написать новый конструктор:
class CountDown: public Counter //определение класса
{ public:
CountDown ( ):Counter(0){ }
CountDown(int c): Counter(c){ }
void dec_count ( ) {count--; }
};
Так как действия в конструкторах базового и производного классов совпадают, то мы подключаем вызов конструкторов базового класса, для выполнения нужных действий.
-
Иерархия классов
На основе принципа наследования может быть построена иерархия классов.
Рассмотрим пример базы данных служащих некоторой компании. В ней существует три категории служащих: менеджеры, занимающиеся продажами, ученые, занимающиеся исследованиями и рабочие, занятые изготовлением товаров.
Иерархия будет состоять из базового типа: employee и трех производных классов: manager, scientist и laborer.
#include
using namespace std;
const int len=80;
class employee
{ private:
int nom;
char name[len];
public:
void getdata()
{ cout<<"vvod N: "; cin>>nom;
cout<<"vvod FIO: "; cin>>name; }
void putdata()
{cout<<" N: " <
cout<<"\n FIO: "<
}
};
class manager:public employee
{ private:
char title[len];
int kol;
public:
void getdata()
{ employee::getdata();
cout<<"vvod dolgnosty: "; cin>>title;
cout<<"vvod kolvo: "; cin>>kol;
}
void putdata()
{ employee::putdata();
cout<<"\n dolgnosty: "<
cout<<"\n kol-vo prodag: " <
}
};
class scientist:public employee
{ private:
int pubs;
public:
void getdata()
{ employee::getdata();
cout<<"vvod kolva pubs: "; cin>>pubs;
}
void putdata()
{ employee::putdata();
cout<<"\n publication: "<
}
};
class laborer:public employee
{ };
int main(int argc, char *argv[])
{ employee x;
manager y;
scientist z;
laborer w;
cout<<"vvod svedenij o 4 sotrudnikax:\n";
x.getdata();
y.getdata();
z.getdata();
w.getdata();
cout<<"vivod information about sotrudnikax:\n";
x.putdata();
y.putdata();
z.putdata();
w.putdata();
return 0;
}
Производный класс может являться базовым для других производных классов.
Например:
class A
{ … };
class B: public A
{ …};
class C:public B
{…};
Здесь класс B является производным класса А, а класс С производным класса B.
Класс может являться производным как одного базового класса, так и нескольких базовых классов (множественное наследование).
Например:
class A
{ … };
class B
{ …};
class C: public A, public B
{…};
Базовые классы перечисляются через запятую после знака :
Работа с объектами чаще всего производится через указатели, например:
employee *р;
Указателю на базовый класс можно присвоить значение адреса объекта любого производного класса:
р = new laborer; или p=&y;
Где y описана, как: manager y;
Обращение к методу через указатель имеет вид:
p->getdata();
P->putdata();
-
Виртуальные методы. Полиморфизм.
Полиморфизм — один из важнейших механизмов ООП. Полиморфизм реализуется с помощью наследования классов и виртуальных методов.
Полиморфизм состоит в том, что с помощью одного и того же обращения к методу выполняются различные действия в зависимости от типа, на который ссылается указатель в каждый момент времени.
Рассмотрим пример иерархии классов, где каждый класс имеет метод с одним именем.
class Base
{
public:
void show()
{ cout<<"Родитель\n";
}
};
class derv1:public base
{public:
void show()
{ cout<<"Сын первый\n";
}
};
class derv2:public base
{public:
void show()
{ cout<<"Сын второй\n";
}
};
int main(int argc, char *argv[])
{
derv1 s1; derv2 s2;
Base *ptr;
ptr=&s1;
ptr->show();
ptr=&s2;
ptr->show();
…
Итак, классы derv1 и derv2 являются наследниками класса Base. В каждом из трех классов имеется метод show(). В main() созданы объекты порожденных классов s1 и s2 и указатель на класс Base. Затем адрес объекта порожденного класса мы заносим в указатель базового класса: ptr=&s1;
Какая же функция будет выполняться в следующей строке:
ptr->show(); Base::show( ) или derv1::show( )?
В этом случае компилятор выбирает метод удовлетворяющий типу указателя (Base::show()) .
Этот процесс называется ранним связыванием.
В C++ реализован механизм позднего связывания, когда разрешение ссылок на метод происходит на этапе выполнения программы в зависимости от конкретного типа объекта, вызвавшего метод. Этот механизм реализован с помощью виртуальных методов [2].
Для определения виртуального метода используется спецификаторvirtual, например:
class base
{
public:
virtual void show()
{ cout<<"base\n";
}
};
Этот процесс называется поздним связыванием.
Если в базовом классе метод определен как виртуальный, метод, определенный в производном классе с тем же именем и набором параметров, автоматическистановится виртуальным, а с отличающимся набором параметров — обычным.
Для каждого класса (не объекта!), содержащего хотя бы один виртуальный метод,
компилятор создает таблицу виртуальных методов (vtbl), в которой для каждого виртуального метода записан его адрес в памяти.
Рекомендуется делать виртуальными деструкторы для того, чтобы гарантировать правильное освобождение памяти из-под динамического объекта, поскольку в этом случае в любой момент времени будет выбран деструктор, соответствующий фактическому типу объекта.
Деструктор передает операции delete размер объекта.
-
Контейнерные классы
Контейнерные классы — это классы, предназначенные для хранения данных, организованных определенным образом.
Контейнеры – это объекты, содержащие другие однотипные объекты.
Для каждого типа контейнера определены методы для работы с его элементами, не зависящие от конкретного типа данных, которые хранятся в контейнере, поэтому один и тот же вид контейнера можно использовать для хранения данных различных типов. Эта возможность реализована с помощью шаблонов классов.
Использование контейнеров позволяет значительно повысить надежность программ, их переносимость и универсальность, а также уменьшить сроки их разработки.
Развитие объектно-ориентированного программирования привело к созданию широкого набора библиотек.
Библиотека STL/CLR представляет собой упакованную библиотеку стандартных шаблонов (STL), входящую в состав стандартной библиотеки C++.
Библиотека ATL расшифровывается как Active Template Library. Это библиотека классов и шаблонов, предназначенная для разработки собственных компонетов. Одно из применений этой библиотеки - это создание собственных элементов ActiveX. Например, с помощью библиотеки ATL вы можете создать собственную особую кнопку (скажем, круглую) и затем использовать ее в программах.
Библиотека MFC (Microsoft Foundation Classes) предназначена в основном для создания приложений с пользовательским интерфейсом (окна, диалоги и т. п.).
Библиотека MFC инкапсулирует многие функции API (Application Programming Interfase), с помощью которых реализуются все необходимые системные действия, такие как выделение памяти, вывод на экран, создание окон и т.п. Библиотека MFC разрабатывалась для упрощения задач, стоящих перед программистом.