- •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. Массивы
- •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()){ //поток не создан, то сообщение и выход
- •Управление потоком ввода-вывода
- •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( //прототип функции создающей узел
- •Void newHead(//прототип функции создания узла
- •Поиск в связанных списках
- •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" // включение головного файла приложения
- •Функция CreateProcess
- •490 _ Глава 7
- •7.8.4 Элементы ActiveX
- •492 Глава 7
- •494 Глава 7
- •7.9 Компоненты-серверы сом
- •496 Глава 7
- •7.9.2 Свойства и методы сервера Word
- •500 Глава 7
- •Заключение
- •Что такое ansi?
- •Почему вместо русских букв в консольном приложении выводится мусор? Автор: Алексей Кирюшкин Версия текста: 1.0
- •Раздел I.2Выход 1
- •Раздел I.3Выход 2
- •Раздел I.4Выход 3
- •Раздел I.5Выход 4
- •(A)Потоки
- •(C)Ввод-вывод файлов
- •Выбор компонентов для групповых операций
- •Установка разделяемых свойств компонентов
- •Изменение размера компонентов
- •Выравнивание компонентов
- •Пример: Создание текстового редактора Проектирование формы приложения
- •Создание обработчиков событий
- •Создание меню
Void newHead(PtrNode& head, //адрес головного узла
char name[], int year //данные нового узла
);
main(){
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
PtrNode head, poisk;
head=new sotrudnik;
char str[30];
int year;
//Формирование списка
for(int i=0;i<3;i++){
cout<<endl<<"Имя: ";
cin>>str;
cout<<"Год рождения: ";
cin>>year;
newHead(head, str, year);
if(i==0) head->link=NULL;
}
//Просмотр списка
poisk=head;
for(int i=0;i<3;i++)
poisk=review(poisk);
//Поиск
cout<<endl<<"Поиск по году рождения:";
cin>>year;
poisk=search(head,year);
cout<<"Имя: "<<poisk->name<<endl<<"Год рождения: "<<poisk->year_b;
char z;
cin>>z;
}
//Функция для вставки нового головного узла
void newHead(PtrNode& head, char name[], int year){
PtrNode tempPtr=new sotrudnik;
strcpy(tempPtr->name,name);
tempPtr->year_b=year;
tempPtr->link=head;
head=tempPtr;
}
//Функция просмотра списка
PtrNode review(PtrNode head){
PtrNode h=head; //указателю присваивается значение головного узла
if(h==NULL){ //Случай пустого списка
return NULL;
}
else{
cout<<endl<<"ФИО:"<<h->name<<endl<<"Годрождения:"<<h->year_b<<endl;
return h->link; //возвращаем указатель
}
}
//Функция поиска
PtrNode search(PtrNode head, int target){
PtrNode h=head; //указателю присваивается значение головного узла
if(h==NULL){ //Случай пустого списка
return NULL;
}
else{
while(h->year_b!=target && h->link!=NULL) //год не соответствует
h=h->link; //переход к следующему узлу
if(h->year_b==target) //год соответствует
return h; //возвращаем указатель
else
return NULL;
}
}
Директивы препроцессора.
Любая работа начинается с её подготовки. Так поступает человек, но точно так поступает компилятор. Прежде чем перевести программу в машинные коды происходит обработка исходного текста программы. Для этого в компиляторе языка С++ есть специальная программ, которая называется препроцессором. Препроцессор может работать самостоятельно, выполняя возложенные на него операции, но многое он может делать в соответствии с указаниями содержащимися в обрабатываемой им программы. Для этого имеются специальные команды или, как их называют директивы препроцессора.
Каждая директива помещается на отдельной строке и начинается с символа # (решетка). С некоторыми директивами мы уже встречались, но с большинством нам еще предстоит познакомиться.
#include – позволяет включать в программу другие программы или
Директива #include имеет две формы записи, отличающиеся тем, что имя файла указывается либо в угловых скобках, либо в кавычках.
#include <имя_файла>
#include "имя_файла"
Это вызвано тем, что препроцессору нужно указать где искать присоединяемый файл. Имя в угловых скобках говорит о том, что файл с этим именем находится в системных каталогах. Если имя файла заключено в кавычки, то файл находится в текущий каталог, т.е. тот каталог в котором находится сама программа. Если в текущем каталоге этот файл не обнаружен, тогда поиск проводится по всем системным каталогам.
#define –производит определение идентификаторов и макросов. Может встречаться в любом месте программы. Её действие распространяется от места размещения до конца программы или до появления директивы #undefine, которая отменяет действие команды #define. Например,
//До этого момента мог быть текст программы
#define pi 3.14169269
#define begin {
#define end }
//Далее идет текст программы
Препроцессор встретив в тексте программы идентификатор pi заменит его на 3.14169269. Подобным образом он поступит с идентификаторами логических скобок, которые встречаются в других языках программирования. В данном примере они вероятно используются потому, что программист создавший такую программу привык работать с другими языками.
Синтаксис таков
#define имя пробел имя_или_выражение
С помощью директивы #include можно даже менять имена функций. Так знакомая нам программа "Hello Word" может быть записана так.
#include <iostream.h>
#define print cout<<
main(){
print "PRIVET!";
int i;
cin>>i;
}
Иногда в директиву #define входит идентификатор, определенный ранее в другой директиве #define. Тогда происходит подстановка определенного ранее идентификатора в место его применения, например
#define pi 3.14159259
#define pi2 2*pi
Обратите внимание, что с помощью директивы #define препроцессор не заменяет одни символы на другие, а определяет имена и их замену. Поэтому имя 2pi будет воспринято как ошибка, т.е. имя 2pi нельзя использовать даже в директивах препроцессора, что соответствует правилу присвоения имен. Хотя немного ниже мы опровергнем это утверждение.
Замены вызванные директивой #define можно отменить с помощью #undefine и переопределить замены заново.
Директива #define мощный, но не всесильный инструмент. Так замены не выполняются внутри строк, символьных констант и комментариев.
Директива #define часто используется для создания больших программ из отдельных программ написанных различными программистами. В таких случаях возможны присвоение одинаковых имен разным объектам. Для того, чтобы исключить ошибки можно куски программ заключать в своеобразные скобки, состоящие из директив #define и #undefine. Например,
//Текст основной программы
x=10;
//Продолжение программы
#define x y
x=1;//Переменная x заменена на y, поэтому x по-прежнему равен 10
//Текст включаемой программы
#undefine
x++; // После этой операции значение x равно 11
//Текст основной программы
Теперь рассмотрим как с помощью директивы #define определить макрос. Напомним, что макрос это программа замены одной последовательности символов на другую. Мы уже пользовались директивой
#define имя пробел имя_или_выражение
но её можно расширить следующим образом
#define имя(список_параметров) пробел имя_или_выражение
Пример, который приводится практически во всех книгах по языку С++
#define max(a,b) (a<b?b:a)
#include <iostream.h>
main(){
int a,b;
cin>>a>>b;
cout<< max(a,b);
}
В этой программе выражение max(a,b) в главной функции main()заменяется условным оператором a<b?b:a написанным на языке "С". А как выглядит эта программа на "С++"? Например так:
#define max(a,b) if(a<b) cout<<b; else cout<<a;
#include <iostream.h>
main(){
int a,b;
cin>>a>>b;
max(a,b);
}
Вот другой пример
#define max(a,b) (a<b?b:a)
#if с модификацией #ifdef, #ifndef совместно с директивами #else, #enddif, #elif позволяют программировать обработку части кода, которая выделена с помощью этих операторов. Директивы напоминают условные операторы языка if и if-else.
Синтаксис прост
#if выражение1 выражение2
#else выражение3
#endif
Выражение1 может быть логическим или арифметическим символом или строкой. Если выражение1 имеет значение false или ноль значение отличное от нуля то выполняется выражение3, в противном случае выполняется выражение2.
Например,
#include <iostream.h>
#if 2*2 /*произведение равно 4, поэтому компилируется только
первая программа */
main(){
cout<<endl<<"2*2=4";
int i;
cin>>i;
}
#else
main(){
cout<<endl<<"2*2=5";
int i;
cin>>i;
}
#endif
Директива #if может использоваться без директивы #else, подобно тому как это принято в языке С++. Также как в языке директивы могут быть вложенными.
#line -
Интегрированная среда разработки программ Microsoft Visual C++6
Интегрированная среда разработки (Integrated Development Environment) или IDE позволяет создавать программы на языке С++ любой сложности.
В отличие от простых компиляторов программа в IDE создается не в виде отдельного файла, а как множество взаимосвязанных файлов, большинство из которых используется только при отладке программы и в дальнейшем обычно удадаляются. Совокупность таких файлов, обеспечивающих работу и отладку программы называется проектом. IDE работаетпод управлением Windows. Все программы работающие в этой операционной системе принято называть приложениями. Самыми простыми программами на языке С++, создаваемыми в IDE являются, так называемые, консольные приложения.
Консоль – это электрическая печатная машинка, которая в 70-80 годы использовалась для ввода и вывода сообщений операционной системы в вычислительную машину. Позднее машинка была заменена текстовым дисплеем с клавиатурой. Операционная система DOS, которая использовалась на ранних этапах применения персональных компьюьеров также предоставляла возможность работать в режиме консоли. В этом случае экран представлял собой черное окно на которое выводились сообщения системы, или команды вводимые с клавиатуры. DOS, по существу, отдавала все ресурсы компьютера исполняемой программе. Windows работает иначе. В этой системе одновременно работают несколько программ, большинство из которых незаметно для пользователя. Программы и ситема обмениваются между собой сообщениями. Выполнение всех программ контролируется системой. Необходимые ресурсы компьютера для выполнения каждой программы, так же отводятся системой. Таким образом, программа создаваемая в среде Windows должна уметь создавать сообщения для операционной системы и обрабатывать или, говоря иначе, реагировать на сообщения системы.
К счастью, операционная система Windows может работать в режиме имитации консоли. Это нужно для того, чтобы программы созданные под DOS выполнялись в новой операционной системе. Для нас это дает возможность создавать программы для С++ не задумываясь над тем как создавать и обрабатывать сообщения системы, ведь в DOS их нет.
Первое, что необходимо сделать когдавы приступаете к созданию новой программы это созать проект. Строго говоря, проект создаст сама IDE, вам нужно лишь сказать какого рода приложение будет создано в проекте, и дать имя проекту.
Для этого:
В строке меню выберите пункт меню File, а в нем команду New.
В появившемся диалоговом окне перейдите на вкладку Projects.
В поле Projects name введите имя проекта, например My first project. IDE позволяет использовать любые имена, например, имена из нескольких слов, т.е. имена содержащие пробелы. Можно использовать одни цифры. Более того, в именах можно применять кириллицу, но как делать это не рекомендуется, во избежании непонятных сбоев в работе англоязычных программ.
Укажите тип создаваемого проекта, выделив его из списка. В данном случае это Win32 Console Application,
В поле Location (Расположение) нужно указать путь к папке в которой будет гаходиться проект.
Нажмите кнопку ОК, после чего появится окно
В появившемся окне гажмите кнопку Finish.
Появится новое окно в котором говорится, что сделает IDE после того как будет нажата кнопка ОК. В данном случае сказано, что будет создан скелет проекта консольного приложения со следующими свойствами: чистое консольное приложение, никакие файлы не будут созданы или добавлены в проект. Внизу указана директория в которой будет находиться проект.
Нажмите кнопку ОК. В окне проекта появятся две закладки: ClassView (Отображение классов) и FileView (Отображение файлов). Щелкните по закладке FileView, затем на + возле названия файла, в данном случае это My first project
В окне проекта появится изображение пустых пока папок: Sourse Files (Исходные файлы) Header Files (Заголовочные файлы) и Resourse Files (Файлы ресурсов).
В папке Sourse Files хранятся исходнве файлы программы созданной программистом. Поместим туда для начала пустой файл в котором позднее запишем свою программу. Для этого в строке меню выберем Project, а затем Add To Project и New (Проект→Добавить к проекту→Новый, имеется в виду новый файл). После этого откроется окно в котором нужно выбрать тип файла из предлагаемого списка.
В данном случае следует выбрать файл типа C++SourseFile (Исходный файл С++). Этот тип файлов имеет расширение .cpp. Кроме иого в поле File Name следует указать имя файла. Пусть это будет first (первый). После чего нажмите кнопку ОК.
Теперь все готово для создания программы, которая пишется в поле редактирования.
Мы уже говорили, что проект это совокупность файлов, часть из которых создает программист, а другая часть создается средой программирования. Представим себе, что нам потребовалось создать и внести в проект второй файл с именем second.
Структуры файлов в C++ Builder
Наталия Елманова, Центр Информационных Технологий