Программирование на C и C++

Онлайн справочник программиста на C и C++

Основы С++

Поскольку С++ является надмножеством С, то большинство программ на языке С являются также программами и на языке С++. (Имеется несколько небольших различий между С и С++, благода­ря которым некоторые типы программ на языке С не будут компилироваться компилятором язы­ка С++. Можно писать программы на С++, которые выглядят в точности как программы на языке С, но в таком случае не будут использоваться пре­имущества, предоставляемые С++-программистам. Кроме того, большинство программистов, пи­шущих на языке С++, используют стиль и некоторые особенности написания программ, которые присущи только С++. Поскольку важно использовать весь потенциал С++, то в этом разделе мы обсудим некоторые из таких особенностей, прежде чем перейти к собственно С++. Начнем с примера. Рассмотрим программу на языке С++:

#include <iostream.h>
#include <stdio.h>
int main()
{
int i ;
char str [80] ;
cout << "I like Borland C++.\n"; // однострочный комментарий
/* также можно использовать С-комментарии */
printf ("You can use printf(), but, most С++ programs don' t. \n");
// ввод числа с помощью >>
cout << "Enter a number: ";
cin >> i;
// вывод числа с помощью <<
cout << "Your number is " << i << "\n";
// чтение строки
cout << "Enter a string: ";
cin >>str;
// вывод
cout << str;
return 0;
}

Как можно видеть, эта программа выглядит совершенно отлично от обычной программы на языке С. Заголовочный файл iostream.h определен С++ и предназначен для поддержки операций ввода/вывода. Включение заголовочного файла stdio.h обусловлено использованием функции printf(). Если используются операции ввода/вывода собственно языка С++, то необходимости в этом файле нет.

Одной из особенностей, на которую стоит обратить внимание, служит объявление функции main()

int main()
вместо
int main(void)

которое используют программы на языке С. Причина этого заключается в том, что в языке С++ пустой список параметров эквивалентен спецификатору void. Это означает, что оба типа объяв­ления функции равноправны в рамках языка С++. В С++ использование зарезервированного слова void для обозначения пустого списка параметров является допустимым, но рассматривается как излишество. Поскольку оно не является необходимым, далее в наших программах мы не будем использовать слово void для обозначения пустого списка параметров.

Следующая строка кода содержит несколько особенностей языка С++:

cout << "I like Borland C++.\n"; // однострочный комментарий
Оператор
cout << "I like Borland C++.\n";

выводит на экран «I like Borland С++.», после чего следует переход на следующую строку и возврат каретки. В С++ роль оператора << значительно расширена. Он продолжает выполнять роль оператора побитового сдвига влево, но используется также как оператор вывода данных в случае, если записан в указанной в примере форме. Слово cout представляет собой идентифика­тор, соответствующий экрану. Так же как и С, язык С++ поддерживает перенаправление ввода/ вывода, но, чтобы избежать дискуссий на эту тему, мы можем принять, что cout ссылается на экран. Можно использовать cout и оператор << для вывода данных любого встроенного типа, а также для вывода строк символов.

Важно отметить, что можно продолжать пользоваться функцией printf() (что проиллюстриро­вано в записанной выше программе) или любой другой функцией ввода/вывода языка С, но боль­шинство программистов находят, что использование cout<< более соответствуют духу С++. В об­щем случае программы на языке С++ могут использовать любые функции, поддерживаемые Borland С++, включая и те, что определены языком С. Однако, в тех случаях, когда С++ предлагает альтернативный подход, ему следует отдавать предпочтение перед использованием функций язы­ка С, хотя и нет правил, предписывающих это.

В предыдущей строке кода комментарии С++ следовали за выражением для вывода данных. В С++ комментарии определяются двумя способами. Комментарии языка С сохраняют свое значе­
ние и в С++. Однако в С++ можно также определить комментарии размером в одну строку, используя //. Когда комментарии начинаются с //, все, что следует за этими знаками, игнориру­ется компилятором до конца строки. Обычно при включении многострочных комментариев ис­пользуют нотацию С, а однострочных — С++.

Далее программа выводит запрос-подсказку пользователю, чтобы он ввел число. Число читает­ся с клавиатуры, используя следующую инструкцию:
cin >> i;

В С++ оператор >> сохраняет свое значение сдвига вправо, но если он используется как пока­зано выше, то служит оператором ввода числа с клавиатуры и записи его в переменную i. Иден­тификатор cin ссылается на клавиатуру. В общем случае можно использовать cin >> для загрузки переменных любого базового типа или строки.

Хотя в программе это и не проиллюстрировано, можно свободно использовать любую функ­цию С для ввода данных, например, функцию scanf(), вместо cin >>. Однако, как и в случае с cout, подавляющее большинство программистов находят использование cin >> в большей мере со­ответствующим духу С++.

Рассмотрим другую интересную строку программы:

cout << "Your number is " << i << "\n";
Этот код выводит на экран следующую фразу (предполагается, что значением i служит 100):
Your number is 100

после которой идет перевод каретки и переход на новую строку. В общем случае можно выпол­нять столько операций вывода <<, сколько надо.

Остальная часть программы демонстрирует, как можно прочитать и вывести строку, используя cin >> и cout <<. При вводе строки cin >> прекращает чтение, как только встречает специальный символ. Это аналогично тому, что делает стандартная функция scanf() при вводе строки.