- •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)Ввод-вывод файлов
- •Выбор компонентов для групповых операций
- •Установка разделяемых свойств компонентов
- •Изменение размера компонентов
- •Выравнивание компонентов
- •Пример: Создание текстового редактора Проектирование формы приложения
- •Создание обработчиков событий
- •Создание меню
InStream.Open("character.Dat"); /*присоединение файла к входному потоку */
for(int i=0; i<5;i++) { //цикл для чтения смволов из файла
inStream>> ch2[4-i]; //чтение символов из файла
// с помощью входного потока
}
for(int i=0; i<5;i++) {
cout<< ch2[i]; // стандартный выовод с помощью потока
//библиотеки iostream
}
InStream.Close(); //закрытие входного потока
}
Обратите внимание, что при объявлении потоков не указано с каким типом данных работает этот поток. Именно в этом состоит особенность организации потоков.
Для того чтобы лучше понять, что такое поток попробуйте вместо массива ch1[5]объявить и в дальнейшем использовать массив целых чисел. Тогда программа будет записывать в файл целые числа, а считывать символы. Также можно объявить массив чисел с плавающей точкой и посмотреть, что получится в этом случае.
Мы уже говорили, что используемые ранее оператора ввода с клавиатуры cin и вывода на экран cout на самом деле являются потоками. В одной программе может существовать несколько потоков одновременно, что, и продемонстрировано примером. Нужно только помнить, что перед выходом из программы все потоки нужно закрыть. В противном случае не исключена возможность повреждения информации в файле. Еще раз подчеркнем, что закрытие потоков производится с помощью функции-члена close, которая присутствует в обоих классах ifstream и ofstream.
Классы ifstream и ofstream имеют конструкторы, которые автоматически открывают файл. Параметры этих конструкторов принимают те же значения по умолчанию, что и функция open(). По этой причине файлы часто открывают следующим образом:
ifstream mystream(“myFile”);//открытие файла для ввода
Поток – это объект поточного класса. Если поток открыть не удалось, например из-за того, что не подключен диск с нужным файлом, то поток возвращает false, иначе true.
Это свойство можно использовать для проверки открытия потока.
if(!mystream){
cout<<”Не удается открыть файл myFile”<<endl;
Кроме функций open и close эти классы имеют другие полезные функции. Например, для проверки того, что выбранное действие с потоком оказалось удачным существует функция fail(), что можно перевести как неудача, провал. Функция не имеет аргументов. Вызов функции для потока outStream, который использовался в программе, выглядит следующим образом:
outStream.fail();
Функция возвращает значение типа bool. Причем если действие оказалось неудачным, то возвращаемое значение равно true в случае удачи false.
В рассмотренной программе функцию fail можно использовать, например, для проверки открытия потока.
outStream.open("character.dat"); //присоединение файла к
// выходному потоку
if (outStream.fail()){
cout<<”Не удается открыть файл character.dat\n";/*печать сообщения об ошибке */
exit(1); // Функция аварийного завершения работы.
}
Функция exit(int n) ничего не делает с потоками, она только немедленно завершает работу процесса или программы и передает вызвавшему ее процессу, которым обычно является операционная система, код возврата. На самом деле все сделано не так просто. Сначала вызываются специальные функции завершения программы, которые сбрасывают содержимое буферов в открытые файлы и закрывают эти файлы. После этого функция exit(n) возвращает свой аргумент операционной системе. Та в свою очередь ничего не делает если n=0, но если n=1, то предпринимает действия предусмотренные при установке системы. В качестве параметра функции exit могут также использованы константы EXIT_SUCCESS и EXIT_FAILURE, эквивалентные 0 и 1. Конечно, функция exit, как и все другие функции, тоже принадлежит к какому то классу или библиотеке. Имя этой библиотеки cstdlib. Формально, для того чтобы получить доступ к этой функции нужно в заголовочном файле указать директиву
#include <cstdlib>
т.е. подключить стандартную библиотеку. Большинство компиляторов делают это автоматически без дополнительных указаний.
Аргументом функции exit может быть любое число, однако по принятому соглашению используются только 0 и 1.
Пример программы с потоками в среде C++Builder
В качестве примера работы с потоками создадим форму с двумя окнами и меню содержащее разделы «Открыть» и «Сохранить». В левое окно записывается какой-нибудь текст, который с помощью меню сохраняется в файле на жестком диске. В правом окне сохраненный текст, также с использованием меню, может быть прочитан.
На форме следует разместить компоненты Главное меню (MainMenu), два окна Edit, диалоги OpenDialog и SaveDialog.
В окне кода следует подключить библиотеку
#include <fstream.h>
Кроме того нужно создать глобальную переменную в которую будут записываться имена файлов
AnsiString MyFile;
Далее нужно создать меню «Файл» с разделами «Открыть», «Сохранить» и «Выход»
Целесообразно присвоить данным разделам имена. Далее это соответственно File, Open, Save и Exit.
Теперь нужно создать обработчики событий, которые возникают при щелчке мыши по разделам меню.
void __fastcall TForm1::SaveClick(TObject *Sender)
{
if(OpenDialog1->Execute())
MyFile=OpenDialog1->FileName;
else{
ShowMessage("Невозможно открыть файл "+MyFile);
return;
}
//создание потока и работа с ним
ofstream out(MyFile.c_str());//вызов конструктора потока