- •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)Ввод-вывод файлов
- •Выбор компонентов для групповых операций
- •Установка разделяемых свойств компонентов
- •Изменение размера компонентов
- •Выравнивание компонентов
- •Пример: Создание текстового редактора Проектирование формы приложения
- •Создание обработчиков событий
- •Создание меню
4.3 Демонстрационные программы
Рассмотрим одну простую программу, которая сравнивает три строки.
#include <string.h>
#include <iostream.h>
int main(void)
{
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";/*объявили
* указатели символьных массивов
* и инициализировали их*/
int ptr;
ptr = strcmp(buf2, buf1);
if (ptr > 0)
cout<<("buffer 2 is greater than buffer 1\n");
else
cout<<("buffer 2 is less than buffer 1\n");
ptr = strcmp(buf2, buf3);
if (ptr > 0)
cout<<("buffer 2 is greater than buffer 3\n");
else
cout<<("buffer 2 is less than buffer 3\n");
return 0;
}
4.10. Класс string
Стандартом ANSI C++ предусмотрена специальная библиотека string. Эта библиотека состоит из одного класса string, в который входят более ста функций членов. Некоторые из этих функций выполняют операции со строками значительно эффективнее, чемфункции, которые мы привели ранее в таблице. Например, для копирования одной строки в другую используется оператор =, а для объединения (конкатинации) строк оператор +. В качестве иллюстрации приведем маленькую программу.
#include <iostream>
#include <string> //требуется для работы с классом string
using namespace std;
int main()
{
string s1="Hellow", s2="my friend!", s3;
s3=s1+s2;
cout<<s3;
}
В результате выполнения программы на экране появится строка:
Hellowmy friend!
Обратите внимание – операция конкатинации не вносит дополнительных пробелов, поэтому слова Hellow и my записаны слитно.
Класс string исключает проблемы со строками, которые возможны при использовании библиотеки stdlib.
В классе string есть несколько конструкторов. По умолчанию объект типа string инициализируется пустой строкой. Кроме того есть конструктор с одним аргументом, являющимся стандартной С строкой. Чтобы действительно понять, что сказано в этом абзаце обратимся к рассмотренному выше примеру, но при этом немного модернизируем его.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1,s3; //инициализация пустой строкой
s1="Hellow";
string s2(" my friend!");//инициализация строкой
s3=s1+s2;
cout<<s3;
}
В следующей таблице приведены наиболее часто встречающиеся функции класса string.
Функция-член |
Описание |
Конструкторы |
|
string str; |
Конструктор по умолчанию. Создает объект пустой строки, т.е. в объекте str ничего не записано. |
string str("string"); |
Создает объект класса string со значением "string" |
string str(aString); |
Создает объект класса string с именем str и значением, являющимся копией значения параметра aString типа string. |
Доступ к элементам |
|
str[i] |
Обращение для чтения и записи к символу с индексом i строки с именем str. |
str.substr(position, length) |
Возвращает часть строки, начинающуюся с позиции position и имеющую длину length (только для чтения). |
str.c_str() |
Представляет доступ только для чтения к строке, представленной объектом str. |
str.at(i) |
Обращение для чтения и записи к символу строки str, который имеет индекс i. |
Присвоение/изменение |
|
str1=str2; |
Выделяет для строки str1 объем памяти, равный длине строки str2, и инициализирует строку str1 значением строки str2. |
str1+=str2 |
Символы строки str2 добавляютяс в конец строки str1, для которой выделяется необходимый объем памяти. |
s.empty() |
Если строка s является пустой возвращает true, если s не пустая – false. |
srt1+str2 |
Возвращает строку, которая является объединением строк str1 и str2. Для результирующей строки выделяется необходимый объем памяти. |
str.insert(pos, str2) |
Помещает строку str2 в строку str, начиная с позиции pos. |
str.remove(pos, len) |
Удаляет из строки str подстроку длиной len, начинающуюся с позиции pos. |
Сравнения |
|
str1 == str2 str1 != str2 |
Проверяет равны строки или нет. Возвращает соответствующее логическое значение. |
str1 < str2 str1 > str2 str1 <= str2 str1 >= str2 |
Лекcикографическое сравнение строк |
str.find(str1) |
Возвращает индекс начала подстроки str1, входящей в строку str. |
str.find(str1, pos) |
Возвращает индекс начала подстроки str1, входящей в строку str. Поиск начинается с позиции pos. |
str.find_first_not_of(str1, pos) |
Определяет, в какой позиции в строке str встречается первый символ, отсутствующей в строке str1. Поиск начинается с позиции pos. |
Копирование |
|
strncpy(char *str1,const char *str2, size count) |
Копирует count символов из строки с адресом str2 в массив str1. str2 должен указывать на строку с завершающим нулевым символом. Если длина строки с указателем str2 меньше значения count, то в конце строки-результата str1 добавляются недостающие нулевые символы. Наоборот, если длина строки с указателем str2 больше значения count, резулбтирующая строка с указателем str1 автоматически не получит завершающего нуля. Возвращаемое значение указатель str1. |
До настоящего времени в своих программах при выводе русских текстов мы использовали функцию изменения кодировки консоли SetConsoleOutput(1251). Но можно поступить иначе. Среди функций, входящих в библиотеку windows есть такие, которые перекодируют символы из одной кодовой таблицы в другую. В частности, CharToOem (OEM stands for original equipment manufacturer) – функция, которая может перекодировать символы ANSI т.е. кодировку 1251 в ОЕМ, а функция OemToChar перекодировать их обратно. Работают эти функции следующим образом. Сначала нужно занести каким угодно образом текст в память. После этого запустить функцию, указав адрес начала переводимой строки, и начальный адрес в который будет записан перевод, т.е. синтаксис функции имеет вид:
bool сharToOem(начальный_адрес_строки_предназначенной_для_перевода, адрес_куда_пишется перевод)
Вот пример программы:
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
void main(){
string str = "Строка для перекодировки";
CharToOem( &str[0], &str[0] );
cout << str<<endl;
}
Если вспомнить, что имя массива на самом деле является указателем, то можно перекодировку осуществлять с помощью массива.
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
void main(){
char str[100] = "Строка для перекодировки";
CharToOem(str, str );
cout << str<<endl;
}
Можно еще проще
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
void main(){
char str[100] ;
CharToOem("Строка для перекодировки", str );
cout << str<<endl;
}