
- •5.Препроцессор. Директивы препроцессора.
- •7.Работа с файлами. Текстовый и двоичный режим.
- •8.Указатели. Адресная арифметика.
- •10.Перечислимый тип. Структуры. Объединения.
- •11.Поразрядные операции.
- •13.Спецификаторы класса памяти.
- •14.Пространства имён.
- •15.Компоновка. Правило одного определения.
- •16.Понятие класса.
- •17.Функции-члены класса. Указатель this.
- •18.Конструкторы. Деструкторы.
- •19.Преобразования объектов класса.
- •20.Доступ к членам класса.
- •21.Статические члены класса.
- •22.Друзья класса.
- •23.Совместное использование.
- •24.Перегрузка операций.
- •25.Шаблоны.
- •26.Обработка исключительных ситуаций.
- •27.Производные классы.
- •28.Виртуальные функции. Абстрактные классы.
- •29.Указатели на члены класса.
- •30.Множественное наследование.
- •31.Структура dll-библиотеки.
- •32.Статическое и динамическое подключение dll-библиотек.
- •34.Регистры процессора.
- •35.Использование стека. Команды работы со стеком в языке ассемблера.
- •36.Арифметические команды в языке ассемблера.
- •37.Команды сравнения и перехода в языке ассемблера.
- •38.Команды работы с битами в языке ассемблера.
- •39.Процедуры в языке ассемблера. Передача параметров в процедуру.
- •40.Процедуры в языке ассемблера. Возврат результата. Локальные данные.
1.Типы данных языка С++.
Bool(1)-лог.,(un/signed) char(1)-сим.,цел., wchar_t(2)- сим. Unicode, (un/signed) short int(2)-цел.,(un/signed) int(завис от реализ-4)-цел.,(un/signed) long int(4)-цел.,(un/signed) long long int ,(un/signed) __int64 (MS)(8)-цел.,float(4)-вещ.,double(8)-вещ.,long double(завис от реализ)-вещ.
перечислимый тип – enum, кот явл подмн-вом цел типа,и пуст тип–void,кот имеет спец назнач.,использ для объявл ф-ций,кот не возвращ никакого зн-я,и указателей на зн-е типа void;можно объявл структуры и объед-я;нет спец типов для массивов и строк,кот представл массивом симв.По опред, true -1 при преобраз к цел типу, а false– 0.цел можно неявно преобраз в лог:ненулевые цел- в true, а ноль – в false. Указ-ль м. неявно преобраз в лог зн-е, ненулевой указатель-true, нулевой – false.При выполн бинарных операций производ преобраз-я по умолч для приведения операндов к одному и тому же типу, кот потом использ как тип рез-та.
2.Операции языка С++. Приоритет операций.
:: – опер разрешения обл видимости. При повт объявл имени во влож блоке или классе предыдущие объявл оказ скрытыми. Однако скрытое имя члена класса м использ, квалифиц его именем класса при помощи опер разреш обл вид. Скрытое глоб имя можно использ, если квалифиц его унарной опер разреш обл вид.
( ) – выраж-е в скобках (использ для измен порядка вычисл) или вызов ф-ции.
[ ] – индексное выраж-е, использ для работы с массивами.
. и -> – выбор эл-та, использ при работе с классами, структурами и объединениями.
Операции static_cast (преобраз с проверкой во время компил),dynamic_cast(преобраз с проверкой во время выполн-я), reinterpret_cast (преобраз без проверки), const_cast(константное преобраз) осущ различ преобраз типов. Они имеют след синтаксис: операция<новый тип>(выраж). Угл скобки явл эл-ом синтакс. Опер static_cast осущ преобраз родств типов, напр, указ-ля на один тип к указ-лю на др тип из той же иерархии классов. Опер reinterpret_cast управ преобраз-ми между несвяз типами, напр, цел в указ-ли или указ-лей в др (несвяз) указ-ли. Преобраз dynamic_cast выполн и провер на этапе вып-я. Преобраз const_cast аннулирует действие модификатора const.
- – унарный минус.
~ – обратный код
! – лог отрицание.
* – косвенная адресация
& – адресация Опер ++ и -- инкрементируют (увел на 1) и декрементируют (уменьш на 1) свой операнд. Операнд д. иметь цел,вещ тип или быть указ-лем.Опер инкр и декр м. запис как перед операндом (префиксная форма записи), так и после(постфиксная).При преф операнд сначала инкремент/декремент,затем нов знач участв в дальнейш вычисл выраж,содерж данную опер.При постф операнд инкремент/декремент лишь после того, как его старое знач участв в вычисл выраж.
sizeof – вычисл размера в байтах переменной или типа.
Опер приведения типа запис след образом: (<новый тип>)<выражение>.При преобраз между знак/беззнак знач и при преобраз от типа с большей размер-тью к типу с меньшей размерн-тью могут возникнуть ошибки.Более безопас способом преобраз типов явл использ опер static_cast, dynamic_cast, reinterpret_cast иconst_cast.
% – остаток от деления.
В C++ имеется одна тернарная опер – условная опер.Она имеет след синтаксис: <операнд 1> ? <операнд 2> : <операнд 3>. Если <операнд 1> имеет ненул знач, то вычисл <операнд 2> и результ усл опер явл его знач.Если же <операнд 1> равен 0, то вычисл <операнд 3> и результ явл его знач.В люб сл вычисл только 1 из операндов, <операнд 2> или <операнд 3>.
Опер простого присваивания обозн «=».Знач прав операнда присв-ся лев операнду. Опер выраб рез-т,кот м.б. далее использ в выраж.Рез-том опер явл присвоенное знач.
Опер составного присваивания сост из прост опер присв-я, скомб-ой с как.-л. др бинарной опер.При сост присв-и вначале выполн действ, специфиц-ое бинарной опер,затем рез-т присв-ся лев операнду.
Опер послед вычисл «,» обычно использ для вычисл неск выраж в ситуациях, где по синтаксису допуск только одно выраж.Порядок вычисл подвыраж внутри выраж не определён.
Лог опер «И» и «ИЛИ», усл опер и опер послед вычисл гарант опред порядок вычисл своих операндов.
3.Операторы языка С++.
Опер управ процессом выполн прогр.Состав. опер огран-ся {}. Все др опер заканч ;.
Пустой оператор – ; Пуст опер–сост только из ;.Он м. появ в люб месте прогр,где по синтаксису треб опер. Выполн-е пуст опер не меняет сост-я прогр.
Состав. опер– {...} Действие состав. опер сост в послед вып-и содерж-ся в нем опер,за искл тех случ,когда как.-л. опер явно передает управ-е в др место прогр.
Опер обработки искл-й try { <операторы> }
catch (<объявление исключения>) { <операторы> }
catch (<объявление исключения>) { <операторы> }
... catch (<объявление исключения>) { <операторы> }
Усл-ый оператор if (<выражение>) <оператор 1> [else <оператор 2>]
Оператор-переключатель switch (<выражение>)
{ case <константное выражение 1>: <операторы 1>
case <константное выражение 2>: <операторы 2>
... case <константное выражение N>: <операторы N>
[default: <операторы>] } Он предназначен для выбора 1 из неск альтернативных путей вып-я прогр. Вычисл опер-переключателя нач с вычисл выраж,после чего управ-е передается опер, помеч констант выраж,= вычисл-ому знач выраж. Выход из опер-переключателя осущ опер break. Если знач выраж не = ни 1 конст выраж,то управ-е передается опер, помеч ключевым словом default,если он есть.
Оператор цикла с предусл-м while (<выражение>) <оператор>
Оператор цикла с постусл-м do <оператор> while <выражение>; при истинности выраж происходит продолж работы цикла, а не выход из цикла.
Оператор пошагового цикла for ([<начальное выражение>];
[<условное выражение>];
[<выражение приращения>])
<оператор> Тело опер for выполн до тех пор, пока усл выраж не станет ложным.Нач выраж и выраж приращения обычно использ для инициализации и модификации параметров цикла и др знач.Нач выраж вычисл 1 раз до 1-й проверки усл выраж,а выраж приращ вычисл после кажд выполн опер.Люб из 3 выраж заголовка цикла,и все м.б. опущены.Если опущено усл выраж,то оно счит-ся истин, и цикл станов бесконечным.
Оператор разрыва break; Он прерывает выполн опер while, do, for и switch;м. содерж-ся только в теле этих опер.Управ-е передается опер прогр,след за прерванным. Если break записан внутри влож опер while, do, for, switch, то он заверш только непосред охват-й его оператор.
Опер продолж-я continue; Он передает управ-е на след итерацию в опер цикла while, do,for;м. содерж-ся только в теле этих опер.В опер do и while след итер нач с вычисл усл выраж.В опер for след итер нач с вычисл выраж приращ,а затем происх выч усл выраж.
Оператор возврата return [<выражение>]; Он заканч вып-е ф-ции,в кот он содерж,и возвращ управ-е в вызывающую ф-цию. Управ-е перед-ся в точку вызывающей ф-ции,след за опер вызова. Знач-е выраж,если оно задано, вычисл,привод к типу, объявл для ф-ции,содерж опер возврата, и возвращ-ся в вызывающую ф-цию. Если выраж опущено,то возвращ-мое ф-ей знач не определено.
4.Структура программы на языке С++.
Прогр на С++ сост из директив препроцессора,указ-й компил-ру,объявл-й перем и/или const, объявл-й и опред-й ф-ций.
Объявление переменной задаёт имя и атрибуты(тип, кол-во эл-ов для масс,специф класса пам,инициализатор) перем.Иниц-ор–это константа соответ типа,задающая знач, кот присв-ся перем при созд-и. Объявл-е перем имеет след синтаксис:
[<спецификация класса памяти>] <тип> <имя> [= <инициализатор>]
[,<имя> [= <инициализатор>] ...];
Константы Чтобы объявить объект константой, в объяв-е нужно доб-ть ключевое слово const. Т.к. конст нельзя присв-ть знач,она д.б. инициализир-на.
Типич явл использ-е констант в кач-ве размера массивов и меток в инструкции case. const модифицирует тип, т.е. огранич возмож использ-е объекта,но не указ способ размещ-я конст объекта.
Объявл-е typedef вводит новое имя для типа,не для перем данного типа.Целью часто явл назнач-е короткого синонима для часто использ типа.
Имена,ввод-е с помощью typedef,явл синонимами,а не нов типами.
Объявл-е и опред-е функции Объявл задаёт имя ф-и,тип возвращ знач и кол-во и типы параметров,кот д. присутств при вызове ф-и. Указ-е void в кач-ве возвращ знач означ,что ф-я не возвращ знач. Опред-объявл ф-и,в кот присутств тело ф-и;имеет след синтаксис:
<тип> <имя> (<список формальных параметров>)
{ [<объявления>]
[<операторы>] } Типы в опред-и и объявл-ях ф-и д. совпадать.имена параметров не обяз совпад. Все ф-и в прогр существ на глоб ур-не и не м.б. вложены друг в друга.Среди ф-й выдел 1 глав ф-я,кот д. иметь имя main.С нее нач вып-е прогр, обычно она управ выполн-ем прогр,организуя вызовы др ф-й.чтобы прогр м.б. скомп-вана и вып-на,она д. содерж, по крайней мере,опред ф-и main.
Встраиваемые функции Ф-ю м. опред-ть со специф-ом inline,кот указ компил,что открытая подстановка тела ф-и предпочтительнее обычной реализ вызова ф-и и что он д. пытаться кажд раз генер-ть в месте вызова код, соответ встраиваемой ф-и,а не созд отдельно код ф-и (однократно) и затем выз её посредством обычного механизма вызова.
5.Препроцессор. Директивы препроцессора.
Препроцессор – это прогр,кот обраб текст прогр до компил. Работа препроцессора управ-ся директивами. С помощью препроцессора можно выполнять след опер-и:
включ-е в прогр текстов из указ файлов;
замена идентификаторов послед-тями символов;
макроподстановка, т.е. замена обозн-я параметриз текстом,формируемым препроцессором с учетом конкретных аргументов;
Исключ-е из прогр отдельн частей текста (усл компил-я).
Включение файлов производ с помощью директивы #include, которая имеет след синтаксис: #include <путь>
#include "путь" Угл скобки явл эл-ом синт-са.
Дир #include включ содержимое файла,путь к кот задан,в компилир файл вместо строки с дир.Если путь заключ в <>,то поиск файла осущ в стандарт дир;если в “” и задан полностью,то в задан дир,а если путь полностью не задан – в текущ дир. Дир #include м.б. вложенной-м. встретиться в файле,включ др дир #include. Допустимый ур-нь влож-ти дир #include зависит от реализации компилятора.
Макроподстановки реализ дир #define,кот имеет след синтаксис:
#define <идентификатор> <текст>
#define <идентификатор> (<список параметров>) <текст>
Дир #define заменяет все вхождения идентификатора в исход файле на текст,след в дир за идент.Этот процесс наз макроподстановкой.Идент замен лишь в том случ,если он представ собой отдельную лексему(если напр явл частью строки или более длинного идент,он не заменяется).
Текст представ собой набор лексем,таких как ключ слова, константы, идент-ры или выраж-е.Один или более пробельных символов д. отделять текст от идент-ра (или от заключ в скобки параметров).Текст м.б. опущен.тогда все экземпляры идент-ра будут удал из исход текста прогр.
Список параметров, если он задан, содерж 1 или более идент-ров, раздел запятыми, и д.б. заключ в (). Идент-ры в списке д. отлич друг от друга. Их обл действия огран макроопред-ем,в кот они заданы. Подстановка в препроцессоре носит чисто текст хар-р.Никаких вычисл или преобраз типа не произв.
После того как выполнена макроподстановка,полученная строка вновь просматр для поиска др имен макроопред-й. При повт просмотре не приним к рассмотр имя ранее произвед макроподстановки. Поэтому дир #define x x не приведет к зацикливанию препроцессора.
Примеры
#define N 100
#define MULT(a, b) ((a) * (b))
#define MAX(x, y) ((x) > (y)) ? (x) : (y)
Вызов MULT(x + y, z) будет заменен на ((x + y) * (z)).
Макровызов MAX(i, a[i++])- на ((i) > (a[i++])) ? (i) : (a[i++])).
В дир #define 2 лексемы м.б. «склеены» вместе. Для этого их нужно объед знаками ##. Препроцессор объед такие лексемы в одну.Напр, макроопред #define VAR(i, j) i ## j при макровызове VAR(x, 6) образ идент-р x6.Символ #, помещ перед аргументом макроопред,указ на необх-ть преобраз его в симв строку. При макровызове констр-ция #<формальный пар-р>замен на "<фактический пар-р>".
Замены в тексте м. отменить дир #undef,кот имеет след синтаксис: #undef <идентификатор>.Она отмен действие текущ опред-я #define для идент-ра.Чтобы отменить макроопред,достат задать его идент-р.
Усл компиляция обеспеч-ся в С++ набором команд,кот,по существу, управ не компил-й, а препроцессорной обработкой. Эти дир позволяют исключ из процесса компил-и как.-л. части исход файла посредством проверки усл-й. #if <константное выражение>
[<текст>]
[#elif <константное выражение>
[<текст>]]
...
[#else
[<текст>]]
#endif
Кажд дир #if в том же исход файле д. соответ-ть заверш-щая её дир #endif. Между дир #if и #endif допуск произв кол-во дир #elif и не >1 дир #else. Если дир #else присутств,то между ней и дир #endif на данном уровне влож-ти не д.б. дир #elif.
Препроцессор выбир участок текста для обработки на основе вычисл конст выраж,след за кажд дир #if и #elif.Выбир-ся текст,след за конст выраж со знач-м «истина». Если ни одно огранич конст выраж не истинно,то препроцессор выбирает текст,след за дир #else.Если же дир #else отсутств,то никакой текст не выбир. Конст выраж м. содерж препроцессорную опер-ю defined(<идентификатор>). Эта опер-я возвращ истинное знач-е,если заданный идент-р в данный момент определён,в противном случае выраж-е ложно.
6.Массивы в языке С++.
Массив – это совокуп-ть данных,кот обладает след свойствами:-все эл-ты имеют 1 и тот же тип;-массив имеет 1 имя для всех эл-тов;-доступ к конкретному эл-ту осущ по индексу (индексам).
Объявление массива имеет след синтаксис:<спецификация типа> <имя> [<константное выражение>];<спецификация типа> <имя> [ ];
Здесь [ ] явл эл-ом синтаксиса,а не признаком необязательности конструкции.объявл мас м. иметь 1 из 2 синтакс форм,указ выше.[ ],след за именем, – признак того, что перем явл мас.Конст выраж, заключ в [ ] определяет число эл-ов в мас.Индексация эл-ов мас в C++ нач с 0.Во 2-ой синтакс форме конст выраж в [ ] опущено.Эта форма м.б. использ,если в объявл мас присутств иниц-р,либо мас объявл как формальный пар-р ф-и,либо данное объявл явл ссылкой на объявл мас где-то в др месте прогр.Однако для многомерного мас м.б. опущена только 1-я размерность.Многомерный мас,или мас массивов,объявл-ся путем задания послед-ти конст выраж в [ ],след за именем:<спецификация типа> <имя> [<конст выраж>][<конст выраж>] ... ;
Мас м. сост из эл-ов люб типа,кроме типа void и ф-й,т.е. эл-ты мас м. иметь базовый,перечислимый,структурный тип, быть объед, указ-м или массивом.
Инициализация массивов Как и простые перем,мас м б иниц-ны при объявл.Иниц-р для объектов состав типов(для мас)сост из списка иниц-ров, раздел-х запятыми и заключенных в { }.Кажд иниц-р в списке представ собой либо константу соответ типа,либо список инициализаторов.Эта констр-я использ для иниц-и многомер мас.Наличие списка иниц-ров в объявл мас позволяет не указ число эл-ов по его 1-й размерности.В этом случ кол-во эл-ов в списке инициализаторов и определяет число элементов по первой размерности массива. Тем самым определяется размер памяти, необходимой для хранения мас.Число эл-ов по ост-м размерностям мас,кроме 1-ой,указ-ть обязательно.Если в списке иниц-ров < эл-ов,чем в мас,то остав-ся эл-ты неявно иниц-ся 0 знач-ми.Если же число иниц-ров >,чем треб-ся,то выдается сообщ об ошибке.
Для доступа к конкретному эл-ту мас использ так наз индексные выраж: <имя массива>[<целочисленное выражение>]
Индекс мас м б не только константой,но и выраж,кот имеет целочисл тип,напр, a[i + 1].Объявл мас и индексное выраж,используемое для доступа к эл-ту мас,имеют схожий синтакс но различ по месту в программе. Имя мас явл адресом его начала!Оно имеет тип конст указ-ль на <тип элементов массива>. Конструкция a[i] эквивалентна *(a + i).Для обработки эл-ов масс обычно использ оператор пошагового цикла for.Для обработки многомер мас использ соответ кол-во циклов.В С++ мас тесно связаны с указ-ми.Имя мас м. использ в кач-ве указ-ля на его 1-й элемент.Неявное преобраз-е имени мас в указ-ль на его 1-й эл-т широко использ в вызовах ф-й.Неявное преобраз мас в указ-ль при вызове ф-и приводит к потере информации о размере массива. Вызываемая ф-я д. как.-л. образом определить этот размер, чтобы выполнять осмысленные действия.При объявл многомер мас как пар-ра ф-и м. опустить только 1-ую размерность.Это ограничение при желании м. обойти. Правда, при этом возникают другие проблемы
Ввод/вывод массивов В языке C нет возможности вводить и выводить весь мас 1 оператором ввода/вывода.М. вводить и выводить только 1 эл-т мас. След-но, для того чтобы ввести весь мас, надо использ цикл.Вывод также осущ в цикле.