
- •1.1. Что такое программа и как она выглядит?
- •1.2. Комментарии
- •1.3. Зарезервированные слова и типы данных
- •1.4. Объявление переменных
- •1.5. Операции и выражения
- •1.6. Ввод и вывод
- •1.7. Переменные и константы
- •1.8 Логические операторы
- •1.9. Управляющие операторы
- •1.10. Операторы циклов
- •1.11. Операторы перехода
- •2. Функции
- •2.1. Передача параметров
- •2.2. Библиотечные функции
- •2.3. Локальные и глобальные переменные
- •Объявления функций
- •Время жизни и область видимости программных объектов
- •Int local_var; /* по умолчанию auto */
- •2.4. Перегрузка
- •Виртуальный метод
- •3. Массивы
- •Перечисления
- •Объединения
- •858993459 //Результат будет неопределенным,
- •Множества
- •4. Структуры
- •Int numberPeriod; //число переодов начисления процентов
- •Int page; //Количество страниц
- •Void print(); /*Внимание, записывается только прототип функции */
- •Int yearBorn; //год рождения
- •Int yearBorn; //год рождения
- •4.1. Демонстрационные программы
- •Int done;/*переменная, которая информирует о конце списка файлов */
- •6. Объединения
- •Info;//Обявление переменной типа объединение
- •Info;//Обявление переменной типа объединение
- •7. Объектно-ориентированное программирование
- •7.1. Классы и объекты
- •Демонстрационные программы
- •Результат работы программы
- •7.2. Конструкторы и деструкторы
- •Конструктор копирования
- •Конструктор копирования
- •7.5. Наследование
- •7.3. Создание объектов и обращение к членам объекта
- •8. Абстрактные типы данных
- •9. Пространство имен
- •Void greeting();/*это пространство имен содержит функцию с тем же
- •Void big_greeting(); /*эта функция не попадает ни в одно из созданных подпространств,т.Е. Принадлежит пространству имен std */
- •//Определение функций
- •Void big_greeting() /* определение данной функции не принадлежит ни одному из созданных пространств имен, следовательно дальнейший код помещается в глобальное пространство имен */
- •10. Строки
- •4.3 Демонстрационные программы
- •4.10. Класс string
- •Класс AnsiString
- •Класс AnsiString
- •Класс Set
- •4.9. Перегрузка операторов
- •Использование "умных" указателей
- •4.8. Полиморфизм
- •Главное меню — компонент MainMenu
- •Диалоги
- •Файлы и потоки
- •Ввод-вывод в файл
- •Ifstream inStream; //Объявление входного потока
- •InStream.Open("character.Dat"); /*присоединение файла к входному потоку */
- •InStream.Close(); //закрытие входного потока
- •If(!out){ //при неудачной попытке
- •If(in.Fail()){ //поток не создан, то сообщение и выход
- •Управление потоком ввода-вывода
- •Дополнительные возможности cin и cout
- •Что внутри iostream.H
- •Использование cout
- •Использование символа-заполнителя
- •Управление цифрами значений с плавающей точкой
- •Вывод и ввод одного символа за один раз
- •Чтение ввода с клавиатуры по одному символу за раз
- •Чтение с клавиатуры целой строки
- •Что вам необходимо знать
- •5.2. Ввод имен файлов
- •5.3. Манипуляторы
- •5. Указатели
- •5.1.Типы указателей и операции с указателями
- •Адресная арифметика
- •Сравнение указателей
- •Преобразование типа указателя
- •Указатель void
- •5.2. Динамические массивы
- •Int array[10]; //объявляется массив с именем array
- •Int a[10]; //объявляется массив с именем a
- •Int *array1; //указатель типа int с именем array1
- •Int *array[5];/*массив с именем array, его элементы указатели*/
- •Int (*point)[4][5]; /*объявление указателя на двумерный массив без имени */
- •Использование указателей в функциях и указатели на функции
- •Указатель классов
- •Шаблоны
- •Шаблоны функций
- •Void Swap (t& X, t& y) /* к моменту обращения тип т будет известен и заменен, например, на int */
- •Void sort(t array[], int maxIndex){ /*передали массив и его размер */
- •6.2. Шаблоны классов
- •6.3 Демонстрационные программы
- •7.1 Обработка исключений
- •Исключения и их стандартная обработка
- •Базовый класс исключений vcl Exception
- •Упражнения
- •Обработка исключительных ситуаций, возбуждаемых оператором new
- •Исходные файлы и объявление переменных
- •Связанные списки
- •Void newHead(PtrNode& head, //адрес головного узла
- •Void newHead(PtrNode& head, //адрес головного узла
- •Поиск в связанных списках
- •Void newHead(PtrNode& head, //адрес головного узла
- •Директивы препроцессора.
- •Структура файла проекта
- •Структура make-файла
- •Структура модуля
- •Структура h-файла
- •Файл формы
- •Особенности программирования под Windows.
- •Создание окон.
- •Функция WinMain
- •Создание проекта Win32Application.
- •Библиотека mfc.
- •Создаем код
- •Шпаргалка
- •Структура файла проекта
- •Структура make-файла
- •Структура модуля
- •Структура h-файла
- •Файл формы
- •Файл проекта
- •Введение
- •Свойства компонентов
- •События
- •Менеджер проектов
- •Пример: создание простейшего приложения
- •Графика Внедрение картинок
- •Редактор изображений
- •Классы для хранения графических объектов.
- •If (SelectDirectory( //Компонент библиотеки
- •Методы создания собственной графики. Рисование по пикселам
- •Int px, py; //координаты пикселей
- •Рисование с помощью пера
- •Int px, py; //координаты пикселей
- •Рисование кистью
- •Мультимедиа и анимация Общие сведения о звуковых и видеофайлах
- •Способы воспроизведения звуков
- •Создание мультфильма
- •Воспроизведение немых видео клипов — компонент Animate
- •Проигрыватель MediaPlayer
- •Процессы, потоки, распределенные приложения
- •If include "uOverlayl.H" // включение головного файла приложения
- •Функция CrateProcess
- •Заключение
- •Что такое ansi?
- •Почему вместо русских букв в консольном приложении выводится мусор? Автор: Алексей Кирюшкин Версия текста: 1.0
- •Выход 1
- •Выход 2
- •Выход 3
- •Выход 4
- •Ввод-вывод файлов
- •Выбор компонентов для групповых операций
- •Установка разделяемых свойств компонентов
- •Изменение размера компонентов
- •Выравнивание компонентов
- •Пример: Создание текстового редактора Проектирование формы приложения
- •Создание обработчиков событий
- •Создание меню
1.7. Переменные и константы
При выполнении программы многие величины не изменяются. В качестве примера представим себе программу созданную для вычисления параметров окружности: длины, площади, площади секторов и т.п. В такой программе после ввода значения радиуса вычисляется некоторые параметры окружности, содержащие величину π, а результат выводится на печать. Для того, чтобы каждый раз в операторах не писать число 3.1415926, можно в самом начале программы присвоить этой величине имя PI и в дальнейшем им пользоваться. Однако не исключено, что спустя некоторое время программист забудет об этом и присвоет этому идентификатору новое значение. В результате появятся ошибки. Для того, чтобы исключить такую ситуацию в языкеC++ имеется зарезервированное словоconst, которое запрещает изменение значений переменных. То есть переменную модифицирует в константу, поэтому это слово называется модификатором.
К константе предъявляются минимальные требования. Константа должна быть инициализирована при описании, потому что в дальнейшем ей ничего нельзя присваивать. Часто программа состоит из нескольких подпрограмм, записанных в отдельных файлах. Так вот, константы становятся недоступными для других программ.
У читателя может возникнуть вопрос: а чем лучше константа директивы #define, которая вместо величины PIподставляет в соответствующих местах ее значение? Ответ простой модификаторconstобладает тем преимуществом, что обеспечивает контроль типов, что также бережет программиста от ошибок. Вот простой пример.
#include <iostream>
using namespace std;
const double PI=3.1416;
main()
{
cout<<"PI="<<pi<<endl;
}
Если в тело такой программы вставить оператор, который производит какие то действия с константой, например, осуществляет присваивание нового значения PI=3.1415926, то компилятор укажет на невозможность выполнения данного оператора. Дело обстоит хуже если ввести операторcin>>PI;.В этом случае выводится сообщение о том, что оператор >> неприменим для переменной типаdouble. То есть ошибка программирования идентифицируется неверно. Для компиляторов С++ это весьма характерно. Очень часто они не могут точно описать найденную ошибку. Кстати говоря, даже в простых программах часто возникают ошибки, которые порой не очевидны. В самом деле, попробуйте убрать словоdoubleиз объявления константы. Программа будет работать, но константа будет восприниматься как целое, равное 3.
Вообще говоря,модификаторconstне является таким уж всесильным. В программе константе нельзя присвоить новое значение, но можно ее переопределить и присвоить новую величину. Например, константуPIможно описать как обычную переменную. Вот пример сказанному.
#include <iostream>
using namespace std;
const double PI=3.1415926;
main()
{
cout<<"PI="<<PI<<endl;
double PI;
cin>>PI;
cout<<"PI="<<PI<<endl;
}
Вот пример переопределеня
Почему так происходит мы поймем когда будем говорить о локальных и глобальных переменных.
1.8 Логические операторы
Вычислительные машины сначала создавались для автоматизации вычислитеьных работ. Однако сразу стало ясно, что вычисления связаны с выполнением некоторых логических операций. То есть, при разных условиях вычисления должны происходить разными путями. Примером может являться программа вычисления корней квадратного уравнения. Корни, как известно, определяются по разным формулам в зависимости от знака дискриминанта. Для описания логики выполнения операций пригодилась хорошо разработанная к тому времени алгебра Буля. Возможно, что вы никогда не слышали о такой алгебе, хотя несомненно много раз ею пользовались. Вспомните школу, когда решив задачу у вас возникал вопрос правильно или неверно выполнено решение. И если результат совпадал с ответом приведенным в задачнике, то вы делали вывод, или говоря иначе высказывались, что решение задачи выполнено верно. Алгебра логики это наука которая формально описывает подобного рода высказывания. В такой алгебре есть только два числа trueиfalse означающие соответственно правда (верно) и ложь (неверно). Подобно алгебрамческим выражениям логические выражения строятся с помощью логических операторов. Их довольно много, и мы ограничимся только основными из них. Причем сначала постараемся разобраться в логике работы этих операторов, а уже потом напишем фрагменты кода.
Операторы сравнения.
При необходимости числа и переменные могут быть сравнены. Например, если рассматриваются две целые переменные n=3 иm=5, то результатn<mбудетtrue, а результатом выраженияn>mбудетfalse. Операторы сравнения приведены в таблице.
-
Математический символ
Название
Обозначение
Пример
Значение результата
=
Равно
==
n==m
false
≠
Не равно
!=
n!=m
true
<
Меньше
<
n<m
true
≤
Меньше или равно
<=
n<=m
true
>
Больше
>
n>m
false
≥
Больше или равно
>=
n>=m
false
Обратите внимание, что многие операторы записываются с использованием двух символов. При этом программа понимает их как один символ, подобно esc-инструкциям. Конечно, это объясняется отсутствием специально выделенных клавиш на клавиатуре.
Логическое И обозначается&&, т.е. двумя символами который называется амперсанд. Этот оператор аналогичен логической функции И. Чтобы пояснить как работает этот оператор рассмотрим таблицу значений двух величинxиyтипаbool
-
x
y
x&&y
true
true
true
true
false
false
false
true
false
false
false
false
то есть результат равен trueкогда обе переменных равныtrue, в противном случае результат всегда равенfalse. Например, если использовать две переменныеn=3 иm=5, то в результате их сравнения получим следующие результаты:
(n!=m)&&(n<=m)=true
(n!=m)&&(n>m)=false
(n!=m)&&(n<m)=true
Обратите внимание, на то, что сравниваемые выражения заключены в скобки. Это обстоятельство говорит о том, что в логических выражениях также можно применять круглые скобки. Но здесь это применено не столько для иллюстрации возможностей этих выражений сколько для удобочитаемости. На самом деле оператор && имеет более низкий приоритет, чем операторы сравнения, поэтому при отсутствии скобок результат не изменится. Правда в некоторых случаях язык С++ требует, чтобы все логическое выражение было заключено в круглые скобки, но об этом мы расскажем позднее. Сейчас перейдем к рассмотрению другого оператора.
Логическое ИЛИ. Обозначается двумя вертикальными линиями ||
Вновь продемонстрируем его на таблице
-
x
y
X||y
true
true
true
true
false
true
false
true
true
false
false
false
результат всегда будет trueесли хотя бы одна из переменных имеет значениеtrue. Рассмотрим примет с теми же числамиn=3 иm=5.
(n!=m)||(n<=m)=true
(n!=m)||(n>m)=true
(n!=m)||(n<m)=true
Логическое НЕ.Обозначается восклицательным знаком!
Этот оператор уже нам неоднократно встречался в примерах. При работе с числами его часто можно избежать путем применения знаков неравенств, но при использовании символьных или булевских переменных он бывает необходим. Например, пусть заданы две символьные переменные С1=”a” и С2=”b”. ВыражениеС1!=С2имеет результат true.
С++ сохранил многие свойства языка С. В последнем булевских переменных trueиfalseнет. Вместоfalseиспользуется0, аtrueэто все чтоне ноль, то есть любые значения, напримерchar. Поэтому будьте осторожны, не смотря на то, что ноль intи нольdoubleэто разные значения, в логических выражениях они могут означать одно и тоже, т.е.false. При этом все правила написания логических выражений сохраняются. Различие в реализации булевских переменных часто приводит к дополнительным ошибкам.
Вероятно, вам уже надоели общие рассуждения о логических операторах. Давайте перейдем к рассмотрению более сложных операторов, которые используются при создании кода программ.