Лекция 1. Объектно-ориентированное программирование – это новый подход к программированию. Объектно- ориентированные языки обладают свойством

Лекция 1.

ВВЕДЕНИЕ

 

Приступая к изучению более сложных конструкций языка С++, следует прежде всего повторить тот материал, который был изложен в первой части настоящего пособия, так как невозможно правильно написать объектно- ориентированную программу на С++, путаясь в использовании основных конструкций языка, изложенных ранее. Без предварительного изучения базовых конструкций, таких как: стандартные типы данных, операторы условия и цикла, работа с файлами и массивами, изучение данного материала окажется либо мало эффективным, либо бесполезным.

Объектно-ориентированное программирование – это новый подход к программированию. Объектно- ориентированные языки обладают свойством

объединять данные (разных типов ) и правила их обработки (функции) в единую совокупность, которую затем можно использовать как объект, обладающий определенными, заранее предписанными ему свойствами.

Объектно- ориентированные языки программирования обладают четырьмя общими характеристиками, такими как: инкапсуляция(encapsulation), полиморфизм (polymorphism), наследование (inheritance) и абстракция типов (abstraction)

Инкапсуляция- объединение некоторой группы данных и некоторой группы функций, наследование – передача одним объектам атрибутов и свойств других объектов, полиморфизм – использование одного и того же символа или имени для различных целей.

 

ОБЪЕКТЫ И КЛАССЫ.

 

1.1. Основные понятия.

 

Можно рассматривать объект как переменную нового, определяемого пользователем, типа. Объект всегда принадлежит некоторому классу. Классы – это структуры, которые содержат описания не только данных, но и функций. Для того, чтобы использовать класс, его нужно вначале объявить, точно так же как это делается со структурами. Так же как и для структур для класса сохраняется принцип его полного объявления в программе только один раз до первого использования. После того как класс объявлен, его имя может быть использовано в качестве типа данных при объявлении представителей данного класса.

Простейшим образом класс можно объявить так:

class имя_класса {список компонентов};

где имя_класса – произвольно выбранный идентификатор, список компонентов – определение типов данных и функций класса.

Заключенный в фигурные скобки список компонентов называют телом класса. Телу класса предшествует заголовок. Определение класса всегда заканчивается точкой с запятой.

Итак класс- это тип введенный программистом, а каждый тип служит для описания объектов. (object)

 

Объект – это логическая единица, которая содержит данные и правила обработки этих данных. В объекте может быть реализована защита данных, если данные объявляются приватными или защищенными, то к ним нет доступа извне.

 

Данные и функции могут быть частными (private) защищенными (protected) и общими (public).

Для описания объекта используется конструкция:

Имя_класса имя_объекта;

 

Пример:

 

class comp

{

double imag;// мнимая часть комплексного числа

double real; // вещественная часть комплексного числа

void define(double re=0.0,double im=0.0)

{

real=re; imag=im;

}

void display(void)

{

cout<<real<<”+i*”<<imag;

}

};

 

В отличие от структурного типа в класс могут быть включены функции

(в этом примере define() и display()) Этим новым типом описываются данные

 

comp x1,x2;// объекты класса comp

comp dim[8];// массив объектов класса comp

Когда объект определен можно обращаться к его компонентам.

 


Операция точка.

 

Общий вид операции:

 

Имя объекта . обращение к компонентной функции;

 

Вызывает действие функции для обработки данных именно указанного объекта.

Пример:

x1.define();// real=0.0 imag=0.0

x2.define(4.3,20.0) // real=4.3 imag=20.0

Тогда вызов: x2.display();

приведет к печати 4.3+i*20.0

 

Обращение к компонентам.

имя_объекта.имя_класса::имя_компонента

x1.complex1::real=1.24;

 

или сокращенно

Имя_объекта.имя_элемента

  Класс может иметь столько объектов сколько необходимо, так же как и любая…  

Имя объекта.имя функции();

#include<iostream.h> class rec {

Наследование.

В объектно- ориентированном программировании на основе уже существующих классов можно строить производные классы. Наследование означает, что… Основная форма наследования: class имя_класса_потомка : режим доступа имя_класса_предка{новые объекты};

ИСПОЛЬЗОВАНИЕ ПРЕПРОЦЕССОРА.

 

Директивы препроцессора.

Препроцессор(макропроцессор) - это составная часть стандартного пакета языка Си, которая обрабатывает исходный текст программы до того, как он… Существует целый ряд директив препроцессора и большинство из них предназначено… Наиболее важными из них являются директивы #define и #include.

Включение файлов.

Директива #include включает в текст программы содержимое указанного файла. Эта директива имеет две формы:   #include "имя файла"

Лекция 4.

Условная компиляция.

Условные конструкции препроцессора позволяют компилировать или пропускать часть программы в зависимости от выполнения некоторого условия. Условие…   #if константное_выражение

ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ТИПОВ ДАННЫХ.

Беззнаковые данные хранятся в оперативной памяти просто, чтобы узнать какое число хранится в данном байте или в слове необходимо выписать значения…   Пример:

ОПЕРАЦИИ С БИТАМИ

Поразрядные операции.

 

Побитовые операции можно проводить с любыми целочисленными переменными и константами. Нельзя использовать эти операции с переменными типа float и double Результатом побитовой операции будет так же целое число. К таким операциям относятся &(“И”), | (“ИЛИ”), ^(“исключающее ИЛИ”), ~ (“НЕ”) << сдвиг влево >> сдвиг вправо. Поразрядные операции позволяют обеспечивать доступ к каждому биту информации.

 

E1&E2 (операция “И”) E1| E2 (операция “ИЛИ”) E1^E2 (операция исключающее “ИЛИ”)

Результат каждой из трех операций имеет тип операндов, каждый его бит определяется битами операндов, стоящих на тех же местах

 

Е1 Е2 & | ^

 

Операция отрицания ~E

бит Е Бит результата

0 1

1 0

 

Если надо установить значение старшего разряда переменной типа char равным нулю, то удобно применить операцию &(END) с константой 127

Пример:

ch=сh&127;

пусть ch=’Б’; // Б 10000001

// 127 01111111

тогда получим 00000001


Поразрядные операции удобны для хранения в сжатом виде информации о состояниях ON/OFF(вкл. выкл.) В одном байте можно хранить 8 таких флагов. Часто поразрядные операции находят применение в драйверах устройств.

Пример:

Пусть ch- переменная флагов проверить находится ли флаг в состоянии ОN(вкл) в третьем бите.

if(ch&4) cout<<”3 бит содержит 1 состояние ON”;

// операция if проверяет на неравенство нулю

// 4=00000100

 

Операция сдвига.

 

Сдвиг беззнаковых типов вправо ® приписывается один ноль слева сдвиг беззнаковых типов влево ¬ приписывается один ноль справа

 

Пример:

пусть

unsigned char x=255;//x=11111111

x=x<<3;

//тогда 11111000 x=248

unsigned char x=255;

x=x>>3;

//тогда 00011111 x=31

unsigned x=9;

х<<3;

// x=9 Þ x=00001001

//x=01001000 x=72

 

Доступ к отдельному биту.

Одним из методов, позволяющих доступ к биту - это использование полей битов. Поля битов – это специальный тип членов структуры, в котором определено… struct имя_стуктуры {

ФУНКЦИЯ main().

 

Любая программа на Си и С++ должна содержать функцию main()

Располагать ее в программе можно по своему усмотрению. Некоторые программисты располагают ее в начале файла, другие - в самом конце. Но, независимо от расположения функции main, перечисленные ниже правила для нее всегда соблюдаются.

 

Аргументы функции main()

Функция main, с которой начинается выполнение программы на языке СИ, может быть определена с параметрами, которые передаются из внешнего окружения,… Функция main может иметь и третий параметр, который принято называть argp, и… Заголовок функции main с параметрами имеет вид:

Значение возвращаемое функцией main().

 

Значение, возвращаемое функцией main, является кодом завершения программы и имеет тип int. Если, однако, ваша программа для завершения использует функцию exit (или _exit), то значением, возвращаемым функцией main, будет аргумент, предаваемый функции exit (или _exit).

 

Например, если программа содержит вызов:

exit(1)

то ее код завершения равен 1.

 

Задание для самоконтроля:

 

Написать программу и создать ее в файле под именем prim.exe

используя аргументы функции main составить программу так, чтобы в результате выполнения следующей команды в командной строке

>prim вы справились

на экран вывелось сообщение :

хорошо! вы справились с заданием.


ТИПЫ И КЛАССЫ ПАМЯТИ.

 

Область действия и область видимости переменных.

В языке C++ каждая функция это отдельный блок программы. Попасть в тело функции можно только с помощью вызова данной функции, то есть нельзя… Как уже отмечалось выше, у каждой переменной должен быть оригинальный… Области действия переменных различаются на три основных типа переменных:

Модификаторы переменных.

В языке C++ имеется несколько модификаторов которые изменяют область действия и время жизни переменных     Модификаторы     Применение …  

Модификатор тип_переменной имя_переменной

  6.3.1. Автоматические переменные. Автоматическиепеременные в программе можно описать так:

Время жизни переменных.

Если программист не указал иного, то объект создается, когда встречается его описание, и уничтожается, когда его имя выходит из области видимости,…   Пример :

ПЕРЕГРУЖЕННЫЕ ФУНКЦИИ.

Перегрузкой называют практику придания функции более чем одного значения. Этот термин означает, что в коде программы существует две различные по… Например: играть на пианино

ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.

При вызове функции с переменным числом параметров в вызове этой функции задается любое требуемое число аргументов. В объявлении и определении такой… Таким образом, список объявлений параметров может завершаться многоточием,… Многоточие предупреждает транслятор о том, что определяемая или объявляемая функция может вызываться с произвольным…

УКАЗАТЕЛЬ НА ФУНКЦИЮ.

Основными характеристиками функции является тип возвращаемого значения и список типов формальных параметров. Подобно тому, как имена переменных…   char MyF1 (int, int, int*, float);

РАБОТА В ГРАФИЧЕСКОМ РЕЖИМЕ.

 

Начальные установки графики.

Перед началом работы с графикой, используется функция initgraph(), которая инициализирует графическую систему загружает графический драйвер и…   Функция setlinestyle - устанавливает текущие толщину и тип линии,

Функция line().

Функция line() - вычерчивает линию между двумя заданными точками принадлежит библиотеке graphics.h Общий вид вызова:

Функция lineto().

Функция lineto() чертит линию от текущей позиции курсора в точку с координатами (x,y)Расположена в библиотеке graphics.h Общий вид вызова функции:

Функция circle().

Функция circle() вычерчивает окружность заданного радиуса из заданного центра. Функция находится в графической библиотеке graphics.h В качестве параметров передаются координаты центра окружности и ее радиус… void circle(int x, int y, int radius);

Лекция 11.

 

Функция rectangle ()

Назначение функции rectangle () в вычерчивании прямоугольника. Функция rectangle () вычерчивает прямоугольник, используя при этом текущие тип линии, толщину и цвет вычерчивания.

ФОРМАТИРОВАННЫЙ ПОТОКОВЫЙ ВВОД-ВЫВОД.

В примерах программ рассмотренных выше, использовались операции помещения в поток << , например в стандартный поток вывода cout и операцией… Функция width задает ширину поля вывода. Общая форма ее использования с… cout. width (n) где n- ширина поля вывода, то есть количество позиций для вывода числа.

СПИСОК ЛИТЕРАТУРЫ

 

1. Подбельский В.В. Язык Си++. –М.: Финансы и статистика, 2001. – 560с.

2. Березин Б.И., Березин С.Б.

Начальный курс С и С++.-М.:Диалог Мифи, 2001. – 288с.

3. Кнут Д.Э. Искусство программирования: В 3 т.

Пер с англ. –М.:Вильямс, 2000.

4. Джамса К. Учимся программировать на языке С++.-М.: МИР, 2001.

5. Крейг Арнуш Borland C++ 5: Освой самостоятельно

Пер. с англ. – М.:Восточная Книжная Компания, 1997. – 720с.

6. Крупник А.В. Вопросы и ответы по С и СИ++. –М.:МикроАрт, 1997.-240с.

 

 


Учебное издание.

 

Александрова Татьяна Львовна

Александров Владимир Викторович

 

 

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

Учебное пособие.

 

 

 

Подписано в печать 7.03.2002 г.

Формат 6084 1/16.

Объем 4 п.л. Тираж 300 экз. Заказ 32.

 

Отпечатано в типографии Московской государственной академии

приборостроения и информатики.

107846, Москва, ул.Стромынка,20.