ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.03.2021
Просмотров: 579
Скачиваний: 1
Языки C, Pascal, Fortran и т. д. являются процедурными языками. Программы, написанные на процедурных языках, представляют собой последовательности инструкций. Когда программа становится достаточно большой, она разделяется на более мелкие логические части – подпрограммы (функции). Несколько функций в свою очередь могут объединяться в модуль. Деление программ на подпрограммы и модули является основой структурного программирования. Однако структурный подход не позволяет в достаточной степени упростить большие сложные программы. Основополагающей идеей объектно-ориентированного подхода является объединение данных и действий, производимых над этими данными, в единое целое, которое называется объектом. Для считывания каких либо данных, нужно вызвать соответствующий метод. Прямой доступ к данным невозможен. Программа на С++ состоит из совокупности объектов, взаимодействующих между собой посредством вызова методов друг друга. Большая часть операторов С++ идентична операторам процедурного языка С. С++ является расширением С. Любая конструкция на языке С является корректной в С++; в то же время обратное не верно. ООП является способом организации программы. Основное внимание при его изучении уделяется организации программы, а не вопросам написания кода. Главным компонентом ООПрограммы является объект, содержащий данные и функции для их обработки. Класс является формой или образцом для множества сходных между собой объектов.
Язык Си++ был разработан в начале 1980-х гг. Бьерном Страуструпом
Структура программы С++
Программа С++ строится из отдельных блоков, называемых функциями. Обычно программа разбивается на несколько крупных задач, а затем для каждой из этих задач разрабатывается своя функция.
Пример 1.
// Моя первая программа
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world! ";
cout << "\n";
return 0;
}
Разберем данную программу подробно. Программа содержит следующие элементы
-
Комментарии (начинаются двойным слешем //)
-
Директиву препроцессора #include
-
Директиву using namespace
-
Заголовок функции: int main()
-
Тело функции, ограниченное символами { и }
-
Оператор использования объекта cout
-
Оператор return, завершающий выполнение функции
Определение функции состоит из заголовка функции и тела функции. В общем случае функция С++ вызывается другой функцией. Слово, стоящее перед именем функции, называется возвращаемым типом функции; оно описывает информацию, передаваемую из функции обратно в вызывающую функцию. Информация в круглых скобках представляет собой список параметров, которые содержат описание информации, передаваемой из вызывающей в вызываемую функцию. Программа обязательно должна содержать функцию main (исключением является модуль динамически подключаемой библиотеки, поскольку он не является отдельной программой). Эта функция вызывается кодом начальной загрузки. В примере 1. наша функция может возвращать целое число, на что указывает слово int , а пустые круглые скобки указывают, что функция не принимает аргументов или не принимает от вызывающей функции никакой информации. Аналогично строчке int main() можно записать int main(void). void - явный способ указания на то, что функция не принимает аргументов. Иногда используется запись void main(). Каждая завершенная инструкция в С++ называется оператором. Каждый оператор заканчивается точкой с запятой. Все операторы расположены между фигурными скобками { и }. И наконец в функции main оператор return 0 неявно подразумевается и его можно опустить.
Комментарием в языке С++ считается текст от символа // и до конца строки. Комментарий может находиться в отдельной строке или в той же строке, что и код программы.
При создании исполняемого кода программ на С++ используется препроцессор. Это программа, которая обрабатывает исходный файл перед основной компиляцией. При компиляции данная программа вызывается автоматически. Рассмотрим первую строку нашей программы. Эта директива препроцессора. Она указывает препроцессору добавить в программу содержимое файла iostream. В данном файле содержатся несколько определений, с помощью которых реализуется схема ввода/вывода в языке С++. Итак препроцессор заменяет данную строку содержимым файла, а затем данный объединённый файл обрабатывается компилятором. Такие файлы, как iostream называются включаемыми или заголовочными файлами. В компилятор С++ включено некоторое количество заголовочных файлов. Для языка С и раннего С++, заголовочные ♥файлы имели расширение math.h. Теперь в С++ данный файл имеет вид cmath (для старых файлов С). Новые заголовочные файлы включают в себя также пространства имен. Пространство имен – это новая функциональная возможность языка С++, предназначенная для упрощения создания программ, в которых объединяются готовые коды от разных поставщиков. Например при использовании двух пакетов программных продуктов могут присутствовать функции с одинаковыми именами. Чтобы компилятор понимал, какая функция имеется в виду, поставщик помещает свои продукты в программный модуль, называемый областью имен. Пусть такой функцией будет wanda(), область имен первого пакета Microflop, а второго Piscine, тогда вызов данной функции в каждом из двух случаев будет выглядеть следующим образом
Microflop :: wanda();
Piscine :: wanda();
Классы, функции и переменные, являющиеся стандартными компонентами компилятора С++, помещаются в пространство имен, которое называется std. Чтобы все определения в файле iostream стали доступны, используется директива для пространства имен
using namespace std;
Она называется директивой использования. Можно объявлять с помощью данной директивы лишь те имена, которые необходимы программе
using std :: cout;
using std :: cin;
При использовании данной директивы мы избавляемся от необходимости использования префикса std : :.
Теперь рассмотрим оператор cout. Информация, заключенная в двойные кавычки, является сообщением, которое должно быть выведено на экран (строка символов). Обозначение << указывает на то, что этот оператор отправляет данную строку в объект cout. Эти символы указывают направление потока информации. cout - это предопределенный объект, способный отображать на экране разнообразные данные – строки, числа и отдельные символы. Если переменная string представляет собой строку, то для ее отображения на экране можно применить следующий оператор:
cout << string;
Таким образом, программа вставляет строку в выходной поток, а не отображает на экране сообщение. Комбинация символов \n является специальной формой записи важного понятия, называемого символом новой строки. При использовании этого символа курсор экрана перемещается на начало новой строки. Без этого символа автоматического перехода на новую строку не происходит.
Так как концом оператора в С++ является “;”, то один оператор может занимать несколько строк, а в одной строке может находиться несколько операторов, но нельзя вставлять символ пробела, табуляции или символ возврата каретки в середину такого элемента, как имя; нельзя также помещать символ возврата каретки в середину строки.
Неделимые элементы строки называются лексемами. Обычно одна лексема должна отделяться от другой символам пробела, табуляции или возврата каретки, у которых есть общее название – пробельные символы. Некоторые одиночные символы, например круглые скобки и запятые, являются лексемами, которые не требуется отделять пробельными символами.
Для удобства читабельности и восприятия текста программы следует руководствоваться следующими правилами:
-
В строке присутствует один оператор
-
Открывающаяся и закрывающаяся фигурные скобки для функции располагаются каждая в отдельной строке
-
Операторы функции располагаются с отступом от фигурных скобок
-
Символы пробела не ставятся с обеих сторон круглых скобок, следующих за именем функции
Операторы языка С++.
Программа С++ представляет собой совокупность функций, каждая из которых в свою очередь состоит их совокупности операторов. Рассмотрим некоторые операторы.
Пример 2.
#include <iostream>
using namespace std;
int main()
{
int fleas;
fleas = 38;
cout << "My cat has ";
cout << fleas;
cout << " fleas.\n";
return 0;
}
В результате работы программы мы увидим следующую строку
My cat has 38 fleas.
Оператор объявления.
В операторе объявления указывается тип запоминаемой информации и идентификатор для выделяемой области памяти
int fleas;
Этот оператор выделяет в памяти достаточно места для хранения информации, тип которой обозначается словом int. Для идентификации значения в данной области памяти программа, начиная с этого момента, будет использовать имя fleas. В нашем случае fleas называется переменной. В языке С++ требуется объявлять все переменные, причем как можно ближе к тому месту где они впервые используются (в отличие от Pascal).
Оператор присваивания.
Оператор присваивания присваивает значение некоторой области памяти. Оператор fleas = 38; присваивает целое число 38 области памяти, представленной переменной fleas. Знак = обозначает операцию присваивания. Когда переменной присваивается новое значение, оно замещает значение, ранее хранящееся в области памяти. Операцию присваивания можно использовать последовательно, например
int one;
int two;
int three;
three = two = one = 11;
Присваивание в этом случае происходит в направлении справа налево.
Объект cout.
cout << fleas;
Теперь программа вместо слова fleas выведет на печать целочисленное значение, хранящееся в переменной fleas. Объект cout перед выводом на печать преобразовывает целое число в символьную форму, предварительно определив, что переменная fleas представляет собой целое число, требующее преобразования. Действия объекта cout является результатом объектно-ориентированных свойств языка С++.
Пример 3.
#include <iostream>
using namespace std;
int main()
{
int fleas;
cout << "How many fleas does your cat have?\n";
cin >> fleas;
//Следующая строка объединяет выводимые данные
cout << "Well, that’s " << fleas <<" fleas too many!\n";
return 0;
}
Результат работы программы
How many fleas does your cat have?
100
Well, that’s 100 fleas too many!
Объект cin.
Значение, которое вводится с клавиатуры, присваивается переменной fleas. Это происходит благодаря оператору
cin >> fleas;
Ввод данных рассматривается как поток символов поступающих в программу. Согласно определению, находящемуся в файле iostream, объект cin представляет собой этот поток. cin ведет себя аналогичным образом, как и cout. Так как переменная fleas целочисленная, входные данные преобразуются в числовую форму, используемую компьютером для хранения целых чисел.
Возвращаясь к объекту cout, строку
cout << "Well, that’s " << fleas <<" fleas too many!\n";
можно записать следующим образом
cout << "Well, that’s "
<< fleas
<<" fleas too many!\n";
или так
cout << "Well, that’s ";
cout << fleas ;
cout <<" fleas too many!\n";
Алфавит и типы данных.
Алфавит С++ включает латинские прописные и строчные буквы, арабские цифры, специальные символы. Словарь языка программирования представляет собой совокупность зарезервированных или так называемых «ключевых» слов. Все такие слова содержат только строчные буквы латинского алфавита. Приведем список ключевых слов
|
asm |
continue |
float |
new |
signed |
try |
|
auto |
default |
for |
operator |
sizeof |
typedef |
|
break |
delete |
friend |
private |
static |
union |
|
case |
do |
goto |
protected |
struct |
unsigned |
|
catch |
double |
if |
public |
switch |
virtual |
|
char |
else |
inline |
register |
template |
void |
|
class |
enum |
int |
return |
this |
volatile |
|
const |
extern |
long |
short |
throw |
while |
В языке С++ имеется две группы встроенных типов данных:
-
Базовые
-
Составные (производные)
Базовые типы служат для представления целых чисел и чисел с плавающей точкой. К производным от базовых типов относятся массивы, строки, указатели и структуры.
-
Базовые типы.
Для хранения в компьютере элемента информации программа должна отслеживать три его основных свойства
-
Где хранится информация
-
Какое значение там хранится
-
Вид хранящейся информации
Например, последовательность операторов
int count;
count = 10;
означает, что программа выделяет область памяти, для хранения целого числа, отмечает ее, присваивает этой области метку count и записывает в нее значение 10. Программе известно, где именно в памяти хранится это значение. Переменная – это именованная область памяти, в которой хранятся данные определенного типа. Во время выполнения программы значение переменной можно изменять. Для переменных рекомендуется выбирать такие имена (идентификаторы), которые будут отражать их назначение (count – количество, sum - сумма). Существует ряд обязательных правил именования.
-
В именах можно использовать только следующие символы: буквы латинского алфавита, цифры и символ подчеркивания
-
Первый символ имени не может быть цифрой
-
Символы верхнего и нижнего регистров рассматриваются как разные
-
В качестве имен нельзя использовать ключевые слова языка С++
-
Имена начинающиеся с символа подчеркивания зарезервированы для использования реализацией языка
-
На длину имени не накладывается никаких ограничений
Если идентификатор состоит из нескольких слов, то слова можно разделять символами подчеркивания, либо каждое слово кроме первого пишется с прописной буквы и т.д.
my_eye_tooth myEyeTooth
Для удобства при чтении кода, когда определение переменной не находится в поле зрения, можно использовать префиксы. Например, n – указывает на целочисленную переменную, b – логическое значение, p – указатель, c – единичный символ, str или sz – строка символов, которая завершается нулем и т.д. (nmyEyeTooth).
-
Целые типы.
Во многих системах используются следующие размерности (определяется использованием памяти) целочисленных данных
|
short |
16 разрядов |
-32768…+32767 |
|
int |
в зависимости от реализации языка |
|
|
long |
32 разряда |
-2147483648…+2147483647 |
Чтобы узнать размерность целых чисел в конкретной системе, можно воспользоваться операцией sizeof (возвращает размерность типа данных или переменной в байтах (байты могут быть разные)). Заголовочный файл climits содержит информацию о предельных значениях целочисленных данных различных типов (INT_MAX).
Инициализация переменной представляет собой объединение присваивания значения с объявлением.
long n_int = INT_MAX;
Инициализировать переменную можно, присваивая ей значение другой переменной или выражения, при условии, что эта переменная была определена раньше и все значения выражения определены.
int uncles = 5;
int aunts = uncles;
int chairs = aunts + uncles + 4;
Если не инициализировать переменную, определяемую внутри функции, ее значение будет неопределенным.
Каждый из трех типов описанных выше имеет еще одну разновидность: тип без знака. Это позволяет для данных, которые не могут принимать отрицательные значения, увеличить максимальное возможное значение в два раза. Для объявления таких переменных, необходимо использовать слово unsigned.
unsigned short change;
unsigned int rovert;
unsigned back; (unsigned int back)
unsigned long gone;
При выходе за границу диапазоны данных без знака, одно граничное значение заменяется на другое (противоположное). Для знаковых данных не гарантируется отсутствия ошибки.
ПРИМЕР
#include <iostream>
#include <climits>
#include <clocale>
#include <conio.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
const int ZERO = 0;
short sasha = SHRT_MAX;
unsigned short masha = sasha;
cout << "У Саши есть " << sasha << " рублей, а у Маши " << masha;
cout << " рублей." << endl
<< "Добавим каждому по одному рублю." << endl << "Теперь ";
sasha = sasha + 1;
masha = masha + 1;
cout << "У Саши " << sasha << " рублей, а у Маши " << masha;
cout << " рублей.\nБедный Саша!" << endl;