Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

УМК_ПрОА_3

.pdf
Скачиваний:
8
Добавлен:
03.05.2015
Размер:
524.91 Кб
Скачать

Данные

Константы

 

Переменные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Статические типы данных

Динамические типы данных

Процедурные типы данных

 

 

 

 

 

 

Указатель Функция

 

 

 

 

 

Простые типы

 

 

 

 

Структурированные типы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Целые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Массив

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

unsigned

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Структура

 

 

 

 

 

 

 

 

 

 

int

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

long

 

 

 

 

 

 

 

struct

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пустой

 

 

 

 

 

 

 

Объединение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void

 

 

 

 

 

 

 

union

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Символьный

 

 

 

 

 

 

 

Файл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char

 

 

 

 

 

 

 

Класс

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вещественные

 

 

 

 

 

 

 

class

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

float

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

double

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 3.23 Классификация типов данных в языке С++

Таблица 3.35 Структурированные типы данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип

 

Наимено-

 

 

 

Назначение

 

 

 

 

Синтаксис описания

 

 

 

 

 

 

вание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Массив

 

 

Содержит фиксированное

 

int a[100] /*одномерный массив

 

 

 

 

 

 

 

количество

 

 

 

 

/*целых чисел

 

 

 

 

 

 

 

упорядоченных

 

float d[40][5] /*двумерный массив

 

 

 

 

 

 

 

 

 

 

 

/*вещественных чисел

 

 

 

 

 

 

 

однотипных элементов,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

снабженных индексами.

 

 

 

 

 

 

 

 

 

 

 

 

Бывает одномерным и

 

 

 

 

 

 

 

 

 

 

 

 

многомерным.

 

 

 

 

 

Структу-

 

struct

Содержит фиксированное

 

struct имя_структуры

ра

 

 

число элементов разного

 

{

 

 

 

 

 

 

 

 

 

 

типа

 

тип1 имя_элемента1;

 

 

 

 

 

 

 

 

...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TипN имя_элементаN;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}имя_переменной_типа_структуры;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИМЕР

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

struct date

169

 

 

 

{

 

 

 

 

int day;

 

 

 

char month[9];

 

 

 

int year;

 

 

 

}d;

Объедин

union

Подобно структуре, но в

union имя_объединения

ение

 

каждый момент времени

{

 

 

 

хранит значение только

тип1 имя_элемента1;

 

 

...

 

 

 

одного элемента

 

 

 

TипN имя_элементаN;

 

 

 

}имя_переменной_типа_объединения;

 

 

 

ПРИМЕР

 

 

 

union time

 

 

 

{

 

 

 

 

int hour;

 

 

 

long second;

 

 

 

}t;

Файл

out_file

Последовательность

#include<fstream.h>

 

in_file

элементов одного типа,

ofstream out_file

 

расположенных на

("имя_файла.расширение"); //открытие

 

 

внешнем устройстве.

файла в режиме создания и вывода данных в

 

 

него

 

 

Число элементов в файле

 

 

не объявляется.

ifstream in_file

 

 

 

 

 

 

("имя_файла.расширение");

 

 

 

// открытие файла в режиме ввода данных из

 

 

 

него

Класс

class

Структура, содержащая

class имя_класса

 

 

описание данных и

{

 

 

 

функций

тип1 имя_элемента1;

 

 

типN имя_элементаN;

 

 

 

 

 

 

описание_функции1;

 

 

 

описание_функцииN;

 

 

 

}

 

 

 

 

ПРИМЕР

 

 

 

class date

 

 

 

{

 

 

 

 

public: char name[64];

 

 

 

int day;

 

 

 

char month[9];

 

 

 

int year;

 

 

 

void show_birthday(void); //прототип

 

 

 

функции

 

 

 

};

 

Таблица 3.36 Процедурные типы данных

 

 

 

 

 

 

 

Тип

Наимено-

Назначение

Синтаксис описания

 

вание

 

 

 

Функция

 

Предназначена для

void main(void) /*начало главной

 

 

 

выполнения действий и

/*функции

 

 

 

/или вычисления

float name (float x, float y)

 

 

 

параметра.

 

 

 

/*описание функции с параметрами

 

Операторы языка С++ представлены на рис. 3.24

170

Операторы

Простые

(не содержат других операторов)

Структурированные

(состоят из других операторов)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оператор присваивания

 

 

 

 

Условный оператор IF

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обращение ввода-вывода

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оператор варианта CASE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оператор безусловного перехода

 

 

 

 

Оператор цикла-ПОКА WHILE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оператор цикла-ДО DO WHILE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оператор цикла с параметром FOR

 

 

 

 

 

 

 

 

 

 

 

Рис. 3.24 Операторы управления последовательностью выполнения программы

Таблица 3.37 Арифметические операции

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Знак

Операция

 

Знак

 

Операция

+

Сложение

 

.

 

 

Оператор выбора элемента

-

Вычитание

 

::

 

 

Разрешение области видимости

*

Умножение

 

++

 

 

Приращение

/

Деление

 

--

 

 

Уменьшение

=

Присваивание

 

*

 

 

Указатель на элемент

Таблица 3.38 Операции отношения

 

Знак

 

 

Операция отношения

 

 

= =

 

Равно

 

 

 

 

!=

 

Не равно

 

 

 

 

>=

 

Больше или равно

 

 

<

 

Меньше

 

 

 

 

<=

 

Меньше или равно

 

 

||

 

Логическое ИЛИ

 

 

&&

 

Логическое И

 

 

 

 

?:

 

Условный оператор сравнения.

 

Таблица 3.39 Простые операторы

 

 

 

 

 

 

 

 

 

Оператор

Наимено-

Назначение

 

Синтаксис описания

 

 

вание

 

 

 

 

 

Присваива

 

Записывает значение

 

имя_переменной=выражение;

 

ния

 

вычисленного выражения в

 

ПРИМЕР

 

 

 

именованную ячейку памяти

 

F=3*c+2*sin(x);

 

Переход

goto

Программа переходит на

 

goto метка;

 

 

 

выполнение операторов,

 

ПРИМЕР

 

 

 

следующих за помеченным

 

include <iostream.h>

 

171

 

 

 

 

меткой

void main(void)

 

 

 

 

 

{

 

 

 

 

 

 

float a,b;

 

 

 

 

 

b=5;

 

 

 

 

 

goto ml;

 

 

 

 

 

...

 

 

 

 

 

 

ml: a=b*3;

 

 

 

 

 

...

 

 

 

 

 

 

}

 

 

Ввод

сin>>

Операция извлекает данные

#include <iostream.h>

 

данных из

 

 

из входного потока,

cin>>xl>>...>>xN;

 

входного

 

 

присваивая значение

 

 

 

потока в

 

 

указанным переменным

 

 

 

память

 

 

 

 

 

 

Вывод

cout<<

Операция вставляет данные

#include <iostream.h>

 

данных из

 

 

в выходной поток

cout<<xl<<...<<xN;

 

памяти в

 

 

 

 

 

 

выходной

 

 

 

 

 

 

поток

 

 

 

 

 

 

Таблица 3.40 Специальные символы, используемые с оператором cout

 

 

 

 

 

 

 

Символ

 

Назначение

 

 

 

 

Звуковой сигнал динамика

 

 

 

\b

 

Символ возврата

 

 

 

\f

 

Символ перевода страницы

 

 

 

\n

 

Символ новой строки

 

 

 

\r

 

Возврат каретки

 

 

 

\t

 

Символ горизонтальной табуляции

 

 

\v

 

Символ вертикальной табуляции

 

 

 

\\

 

Символ обратный слеш

 

 

 

\?

 

Знак вопроса

 

 

 

\'

 

Одинарные кавычки

 

 

 

\"

 

Двойные кавычки

 

 

 

\0

 

Нулевой символ

 

 

 

Таблица 3.41 Структурированные операторы

 

 

 

 

 

 

 

 

Оператор

Наимено-

Назначение

Синтаксис описания

 

 

вание

 

 

 

 

Условный

if

Реализует алгоритмическую

if (условие) оператор1; else

 

 

 

 

конструкцию РАЗВИЛКА и

оператор2;

 

 

 

 

изменяет порядок

ПРИМЕР

 

 

 

 

#include <iostream.h>

 

 

 

 

выполнения операторов в

 

 

 

 

void main(void)

 

 

 

 

зависимости от истинности

{

 

 

 

 

 

или ложности некоторого

float a,b,rl,r2;

 

 

 

 

условия

cin>>a>>b;

 

 

 

 

 

cout<<"a="<<a<<" b="<<b<<endl

 

 

 

 

 

;

 

 

 

 

 

 

if (a>b) {rl=a;r2=b;} else

 

 

 

 

 

{rl=b;r2=a}

 

 

 

 

 

cout<<"большее

 

 

 

 

 

число="<<r1<<"меньшее

 

 

 

 

 

число="<<r2;

 

 

 

 

 

}

 

 

Вариант

switch

Реализует выбор варианта из

switch (выражение)

 

 

 

 

 

{

 

172

 

 

любого количества

 

case i:оператор1; break;

 

 

вариантов

 

 

case j:oпepaтop2; breaks-

 

 

 

 

 

 

case k:oпepaтopK; break;

 

 

 

 

 

 

default:oпepaтopN; break;

 

 

 

 

 

 

}

Оператор

while

Организует

выполнение

while(условие)

цикл-

 

одного

 

 

оператора

оператор;

ПОКА

 

неизвестное

заранее число

 

 

 

раз.

 

 

 

 

 

 

Выход – ложность

 

 

 

 

логического выражения,

 

 

 

которое проверяется в

 

 

 

начале каждой итерации.

 

 

 

Тело цикла может не

 

 

 

выполняться ни разу.

 

Оператор

do

Выполнение

 

цикла,

do {операторы;}

цикл-ДО

while

состоящего из любого числа

while(условие);

 

 

операторов,

с неизвестным

 

 

 

заранее числом повторений.

 

 

 

Тело

цикла

выполняется

 

 

 

хотя бы один раз. Выход –

 

 

 

при истинности логического

 

 

 

выражения

 

 

 

Оператор

for

Организует

выполнение

for (i=iн;i<=iк; i=i+Δi)

цикла c

 

одного

оператора

(простого

оператор;

парамет-

 

или

составного)

заранее

 

ром

 

известное число раз.

 

Объектно-ориентированная терминология языка С++

Понятие класса

Класс (class) – это структура, содержащая описания данных функций.

Функции класса называют методами класса.

class имя_класса

{

тип1 имя_элемента1; типN имя_элементаN; описание_функции1; описание_функцииN;

}

Объект является представителем класса и объявляется после определения класса следующим образом:

имя_класса имя_объекта1,..., имя_объектаN;

Пример:

class date

{

public: char name[64]; int day;

173

char month[9]; int year;

void show_birthday(void) //прототип функции };

void main(void)

{

date father, mother, daughter; //объявление объектов класса date

...

}

Понятие инкапсуляции Инкапсуляция – это сокрытие некоторых данных, входящих в класс,

путем объявления их частными (private). В отличие от общих (public)

элементов класса, к которым можно обратиться из любого места программы,

используя оператор-точку, к частным элементам можно обратиться только через функции (методы) класса.

Пример. Работа с классом

class zp // описание класса

{

private: //объявление частных элементов char name[64];

float sal;

public: //объявление общих элементов

void in_dat(char *,float); //прототипы функций void show_sal(void) ;

float change_sal(float);

}

void zp::in_dat(char *new_name,float old_sal) //описание функций

{

}

zp father; //объявление объекта father класса zp

Конструкторы и деструкторы объектов класса

Конструктор предназначен для присваивания исходных данных конкретному объекту данного класса. Конструктор носит имя класса и описывается как обычная функция (метод) класса. После описания конструктора в программе в операторе объявления объекта допускается присваивание начальных значений.

Деструктор – это специальная функция без параметров,

174

обеспечивающая уничтожение объекта в процессе выполнения программы.

Деструктор носит имя класса, начинающееся с символа тильда (~), и

описывается в программе как обычная функция (метод) класса. Применение деструкторов целесообразно при создании динамических списков, которые увеличиваются или уменьшаются в процессе выполнения программы.

Пример. class zp

{

private:

char name[64] ; float sal;

public:

zp(char *,float); //конструктор ~zp(void); //деструктор

void show sal(void);

};

zp::zp(char *new_name,float old_sal) //описание конструктора

{

...;

}

zp::~zp(void); //описание деструктора

{

...

}

void main(void)

{

zp father("Иванов H.M.",2000) ; //инициализация объекта father

...

}

Перегрузка операторов Перегрузка операторов заключается в изменении смысла действия

операторов при работе их с определенными классами. Например, в

некотором классе можно описать функцию сложения двух символьных строк, которую компилятор C++ будет вызывать из этого класса для выполнения соответствующей операции. Если в программе используются,

кроме того, операции сложения переменных типа int или float, то над ними будет выполнена стандартная операция сложения. Другими словами,

смысл оператора сложения изменится только для элементов указанного класса.

Для перегрузки операторов в прототипе и в заголовке функции

175

(метода) класса используется ключевое слово operator, после которого

указывается символ перегружаемого оператора.

Пример.

 

class sum

 

{

 

private:

 

char word[256] ;

 

public:

//конструктор

sum(char *);

void operator +(char *); //перегружаемый оператор (+) void show_sum(void);

};

sum::sum(char *line) //описание конструктора

{

 

...

 

}

/*описание перегружаемого

void sum::operator +(char *line)

{

/*оператора

...

 

}

 

void main(void)

 

{

 

sum statement("C++") ; //инициализация объекта statement statement + " - удобный язык!";

}

Наследование и полиморфизм Наследование – это возможность использования элементов класса,

созданного для одной программы, в другой программе. Исходный класс называется базовым (родительским), построенный из ранее созданного класса называется производным.

Под простым наследованием понимается процесс создания одного производного класса, наследующего элементы базового класса.

Для создания производного класса нужно указать ключевое слово class, имя производного класса, двоеточие, режим доступа к элементам базового класса и имя базового класса. После этого надо определить элементы нового, производного класса.

Пример. Простое наследование

class zp

//описание базового класса

{

 

private:

 

char name[64];

 

176

float sal; public:

zp(char *,float); void show_sal(void) ;

};

class zpp:public zp //описание производного класса

{

private: //определение элементов float prize;

public:

zpp(char *,float,float); void show_sal(void);

};

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

Под множественным наследованием понимается процесс создания производного класса из нескольких ранее созданных базовых классов.

class date

//описание базового класса date

{

 

private:

 

char name[64];

 

char dat_birth[64];

 

public:

 

date(char *,char *);

 

void show_birth(void);

 

};

class zp //описание базового класса zp

{

private:

float sal; public:

zp(float);

void show_sal (void);

};

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

class date_sal:public date,puplic zp // описание производного

{

класса

private:

/*описание элементов

float prize;

/* производного класса

public:

 

date_sal(char *,char *,float,float);

177

void show_date_sal(void) ;

};

Понятие о полиморфизме и виртуальных функциях

Полиморфизм – это способность объекта изменять форму (поли – много, морфизм – изменение формы), возможность использовать одинаковые имена для методов, входящих в различные классы. Перегрузка функций и перегрузка операторов – это проявление полиморфизма во время компиляции программы на языке C++.

Полиморфизм во время выполнения программы обеспечивается использованием виртуальных функций базовых классов и применением указателей на объекты базовых классов. Для создания полиморфного объекта первоначально определяются виртуальные функции базовых классов при помощи ключевого слова virtual, размещаемого перед прототипами функций. В зависимости от того, на объект какого класса будет указывать указатель, определяется, какая виртуальная функция будет вызвана во время выполнения программы.

Создание указателя на объект базового класса выполняется в программе следующим образом:

Имя_базового_класса *указатель;

Для того чтобы изменить форму объекта, указателю присваивается адрес объекта производного класса:

указатель=(имя_базового_класса *)&имя_объекта_производного_класса;

Кроме перечисленных выше, в языке C++ существует еще один способ реализации полиморфизма – использование шаблонов функций и шаблонов классов.

Шаблон функции позволяет определить функции, возвращающие значения разных типов. Например, шаблон функции sqr, возвращающей значение переменной х, возведенное в квадрат, выглядит так:

178