- •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)Ввод-вывод файлов
- •Выбор компонентов для групповых операций
- •Установка разделяемых свойств компонентов
- •Изменение размера компонентов
- •Выравнивание компонентов
- •Пример: Создание текстового редактора Проектирование формы приложения
- •Создание обработчиков событий
- •Создание меню
2.2. Библиотечные функции
Приводя различные примеры, мы старались избегать использования выражений, которые содержали бы математические функции, например возведение в степень, или взятие логарифма. В языке С++ таких операторов просто нет, но есть функции, которые содержатся в библиотеке компилятора. Эти функции написаны лучшими программистами мирового уровня, протестированы на предмет ошибок и, поэтому, вполне могут применяться в наших программах. Вот некоторые библиотечные функции.
Арифметические функции.
Прототип |
Описание |
Заголовочный файл |
int abs(int); |
Абсолютное значение |
cstdlib |
long labs(long); |
Абсолютное значение |
cstdlib |
double fabs(double); |
Абсолютное значение |
cmath |
double sqrt(double); |
Квадратный корень |
cmath |
double pow(double,double); |
Первый аргумент возводится в степень равную второму аргументу |
cmath |
double exp(double); |
e возводится в степень аргумента |
cmath |
double log(double); |
Натуральные логарифм ln |
cmath |
double log 10(double); |
Десятичный логарифм lg |
cmath |
double ceil(double); |
Округление аргумента в меньшую сторону |
cmath |
double floor(double); |
Округление аргумента в большую сторону |
cmath |
Тригонометрические функции
Прототип |
Орисание |
Заголовочный файл |
double cos(double); |
Косинус |
cmath |
double cosh(double); |
Косинус гиперболический |
cmath |
double sin(double); |
Синус |
cmath |
double sinh(double); |
Синус гиперболический |
cmath |
double tan(double); |
Тангенс |
cmath |
double tanh(double); |
Тангенс гиперболический |
cmath |
double acos(double); |
Арккосинус |
cmath |
double asin(double); |
Арксинус |
cmath |
double atan(double); |
Арктангенс |
cmath |
Генератор случайных чисел
Прототип |
Орисание |
Заголовочный файл |
int random(int n); |
random(n) возвращает псевдослучайное целое число большее или равное 0 и меньшее или равное n |
cstdlib |
int rand(); |
Возвращает псевдослучайное целое число от 0 до константы определенной в конкретной реализации компилятора, но не меньшей 32767 |
cstdlib |
Функции работы с символами
Прототип |
Описание |
Заголовочный файл |
bool isalnum(char) |
Возвращает true если аргумент буква или цифра, в противном случае false. |
cctype |
bool isalpha(char) |
Возвращает true если аргумент буква, в противном случае false. |
cctype |
bool isdigit(char) |
Возвращает true если аргумент цифра, в противном случае false. |
cctype |
bool ispunct(char) |
Возвращает true если аргумент не буква, не цифра и не пробел, в противном случае false. |
cctype |
bool isspace(char) |
Возвращает true если аргумент прбел, табуляция или возврат каретки, в противном случае false. |
cctype |
bool isстек(char) |
Возвращает true если управляющий символ, в противном случае false. |
cctype |
bool islower(char) |
Возвращает true если аргумент строчная буква, в противном случае false. |
cctype |
bool isupper(char) |
Возвращает true если аргумент прописная буква, в противном случае false. |
cctype |
int tolower(char) |
Возвращает код строчной версии символа-аргумента. При ее отсутствии возвращает значение аргумента. |
cctype |
int toupper(char) |
Возвращает код прописной версии символа-аргумента. При ее отсутствии возвращает значение аргумента. |
cctype |
Конечно, здесь приведена лишь малая часть библиотечных функций. Для того, чтобы воспользоваться этими функциями нужно создать соответствующую директиву препроцессору в которой указать название библиотеки, в которой находится вызываемая программой функция. Впрочем, мы уже знакомы с библиотечными функциями cin и cout, которые предназначены для обеспечения ввода и вывода. Напомним, что для включения их в программу нужно дать директиву препроцессору в виде #include <iostream>, или #include <iostream.h>. Каждая директива должна начинаться с новой строки. В этих директивах в угловых скобках указывается название библиотеки функции, которой потребуются в программе.
Как и всегда рассмотрим пример программы. В данном случае это будет программа для перевода вводимых строчных символов в заглавные.
//Преобразование строчных символов в заглавные
#include <iostream.h> //подключение библиотек
#include <cctype>
void main(){
char ch;
while(true){
cin >> ch;
ch= toupper(ch);/*определение кода и преобразование кода
в символ с помощью оператора присваивания*/
cout << ch;
}
}
Обратите внимание, что в отличие от функций, которые пишет программист, для библиотечных функций не нужно указывать прототип, зато нужно указать библиотеку.
Среди большого числа библиотек с которыми работает С++ есть библиотека функций предназначенных для работы с операционной системой Windows. В эту библиотеку входит функция, которая позволяет сменить кодировку консоли. Дело в том, что консоль использует, так называемую кодировку “OEM”. В то время как windows работает в кодировке " Windows 3.1 Cyrillic ", или иначе 1251. Коды символов национальных алфавитов в этих кодировках различные. Поэтому на экране вместо русских букв появляются всякие крючки.
Для вывода кириллицы, нужно выполнить два условия:
- сменить кодировку консоли;
- использовать на консоле приемлемый шрифт, т.е. графическое начертание символов в котором предусмотрены требуемые буквы.
В приведенной ниже программе используются функции GetConsoleOutputCP()и SetConsoleOutputCP(номер_кодировки). Первая функция позволяет определить тип применяемой кодировки, в данном случае это будет 866 (т.е. DOS 866) это и есть “OEM”. Вторая назначить кодировку, в данном случае это будет " Windows 3.1 Cyrillic ". Аргументом функции в этом случае будет идентификатор соответствующий данному названию – 1251 (см. приложение).
//Пример программы с печатью русским шрифтом Windows
#include <iostream>
#include <windows>
using namespace std;
int main()
{
cout << GetConsoleOutputCP()<<endl;
SetConsoleOutputCP(1251);
cout << GetConsoleOutputCP()<<endl;
cout<<"Привет!"<<endl<<endl;
return 0;
}
Если вы запустите выполнение программы, то вновь не увидите желаемых русских букв. Чтобы их получить необходимо выполнить второе условие – применить специальный шрифт. Выбор шрифтов у консоли невелик. Нам подойдет "Lucida Console". Для того чтобы его установить щелкните по левому верхнему углу окна консоли. В появившемся меню выберите пункт "Свойства". На вкладке "Шрифт" выберете "Lucida Console". Если компилятор говорит о том, что не может найти файл windows попробуйте присоединить windows.h.
Нажмите кнопку "OK", после чего откроется новое окно с вопросом о времени сохранения этого шрифта. Выберите ответ по своему усмотрению. Результатом этой работы должно быть следующее окно.
В библиотечные функции входит большой раздел функций, которые обеспечивают управление окнами, положением курсора, вводом и выводом не только при работе с консолью, но и с другими устройствами, например с сетью, дисками. Библиотечные функции работают с системным временем и датами, осуществляют преобразование типов, управляют процессами, организуют потоки, воспроизводят звуки, а также многие другие действия
В качестве примера попробуйте создать следующую программу и объяснить результаты ее работы
#include<iostream>
#include<windows.h>
using namespace std;
main(){
for(int i=0;i<20;i++){
SetCursorPos(rand()%640,rand()%480); /*установка курсора в точку
со случайными координатами */
Sleep(100); //пауза 100 миллисекунд } }
}
}
Заканчивая разговор о функциях, сделаем еще одно замечание.
Если функция не объявлена со спецификатором void, то её можно использовать в качестве операнда в любом выражении. Например,
//Программа для нахождения наибольшего из двух целых меньших 100
#include <iostream>
#include <windows>
using namespace std;
int max(int x, int y){return x>y?x:y;} /*Определяет максимальное
из двух целых x и y*/
void main(){
SetConsoleOutputCP(1251);
int i,j;
do {
cout<<"i=";
cin>>i;
cout<<"j=";
cin>>j;
if(max(i,j)<0) //
cout<<"введите числа еще раз\n";
else cout<<"max="<<max(i,j)<<endl;
}
while(max(i,j)<100);
}