Умный дом

Как писать программы на С++

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

Прекрасно, откуда начнем? Начнем там, откуда начинают­ся все программы на С++ - с функции, называемой main () . main (). Внедряемая пользователем функция в следующей основной форме:

Int main(){

// код нашей программы далее}

Где int - это ключевое слово языка С++. Ключевые слова - предопределенные имена, имеющие особое значение в язы­ке. int представляет встроенный целый тип данных.

Функция - независимая последовательность кодов, произ­водящих некие выкладки. Она состоит из частей: возвращае­мого типа, имени функции, списка параметров и тела функ­ции. Рассмотрим каждую из нихх по очереди.

Возвращаемый тип функции обычно представляет резуль­тат вычислений (выкладок), main () имеет целый возвращае­мый тип. Значение, возвращаемое main (), показывает, было ли выполнение нашей программы успешным. По соглаше­нию main () возвращает «О» при удачном выполнении. Нену­левое значение показывает, что что-то идет не так.

Имя функции выбирается программистом из соображе­ний наилучшим образом определить, что функция будет де­лать. min () и sort (), например, - хорошие имена функций, f () и g () не так хороши. Почему? Они менее информативны в отношении назначения функции.

Main - не ключевое слово. Система компиляции, выполня­ющая нашу программу С++, предполагает, что функция main () предопределена. Если мы забудем включить ее, про­грамма не будет работать.

Список параметров функции заключен в круглые скобки и размещен за именем функции. Пустой список параметров, как у main (), обозначает, что параметры функции не переда ются.

Список параметров, - обычно разделяемый запятой пере чень типов данных, которые пользователь может передать функции при ее выполнении. (Мы говорим, что пользова­тель вызывает или активизирует функцию). Например, если мы напишем функцию min (), возвращающую наименьшее из двух значений, ее список параметров должен определить типы двух значений, которые мы сравниваем. Функция min () для сравнения двух целых чисел может быть определена сле­дующим образом:

Int min(int vail, int val2){ // код программы следует здесь...}

Тело программы заключено в фигурные скобки {}. Оно содержит последовательность кодов, которая осуществляет все действия функции. Двойная прямая косая черта / / озна­чает пояснения, заметки программиста по каким-то аспектам кодов. Они предназначены для читающих исходный текст программы и выбрасываются при компиляции. Все, следую­щее за прямой двойной косой чертой до конца линии, отно­сится к комментарию.

Наша первая задача - написать вывод сообщения на тер­минал пользователя. Ввод и вывод в языке С++ не предопре­делены. Вернее, они поддерживаются объектно-ориентиро­ванным классом иерархии, встроенным в С++ как часть стандартной библиотеки языка.

Класс - тип данных, определяемых пользователем. Меха­низм работы классов - метод добавления типа данных, рас­познаваемого нашей программой. Объектно-ориентирован­ная иерархия классов определяет семейство относительных типов класса, например терминала и файлового ввода, тер минала и файлового вывода и т. д.

С++ предопределяет небольшое множество основных ти­пов данных: булевы, символьные, целые и с плавающей точ­кой. Хотя они служат основой для всего программирования, мы не будем сосредотачивать на них внимание. Кинокамера, например, должна иметь положение в пространстве, обыч­но представляемое тремя числами в формате с плавающей точкой. Камера должна, кроме того, иметь ориентацию в пространстве, описываемую еще тремя числами с плаваю­щей точкой. Есть еще одно отношение, описывающее отно­шение расстояния до камеры к высоте предмета. Оно пред­ставлено единственным числом с плавающей точкой.

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

Механизм классов позволяет нам добавить в программу уровни абстракции типов. Например, мы можем определить класс трехмерных точек для представления локализации и ориентации в пространстве или класс Камер, состоящий из двух объектов класса трехмерных точек и числа с плавающей точкой. Мы все еще представляем камеру семью числами с плавающей точкой. Но разница в том, что в нашей програм­ме мы теперь можем напрямую манипулировать с классом Камер, а не с семью числами с плавающей точкой.

Определение класса обычно разбивается на две части, каждая из которых представлена своим файлом: файлом за­головка, производящим объявление операций, поддержива­емых классом, и файлом текста программы, который содер­жит реализацию этих операций.

Для использования класса мы включаем в программу файл заголовка. Файл заголовка делает класс узнаваемым программой. Стандартные библиотеки ввода/вывода в С++ вызываются из библиотеки iostream. Она содержит подбор­ку связанных классов, поддерживающих ввод и вывод на пользовательский терминал и в файлы. Чтобы использовать библиотеку класса iostream, мы должны включить ассоции­рованный с ней файл заголовка:

#include <iostream>

Для обращения к терминалу пользователя мы используем предопределенный объект класса, названный с out (произ­носится «си аут»). Мы направляем данные, которые хотим, чтобы cout написал, пользуясь оператором вывода (« ), сле­дующим образом:

Cout « "Please enter your first name: "?

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

Please enter your first name:

Наша следующая задача - прочитать ввод пользователя. Прежде чем мы сможем прочитать имя, напечатанное пользователем, мы должны определить объект, в котором сохраним информацию. Мы определим объект, обозначив тип данных объекта и дав ему имя. Мы уже видели один тип данных int. Но трудновато использовать его для хранения чьего-либо имени. Больше подходит тип данных из стандар­тной библиотеки строкового класса:

String user_name;

Это определяет user_name, как объект строкового клас­са. Определение названо заявительным предложением. Это предложение не будет приниматься до тех пор, пока мы не сделаем строковый класс известным программе. Мы осуществляем это включением файла заголовка строково­го класса:

#include <string>

Для чтения ввода с терминала пользователя, мы использу­ем предопределенный объект класса, называемый сіп (произ­носится «си ин»). Мы используем оператор ввода ( » ) для направления сіп на чтение данных с терминала пользователя в объект подходящего типа:

Cin » user_name;

Последовательности вывода и ввода появятся на термина­ле пользователя следующим образом (ввод пользователя от­мечен жирным шрифтом):

Please enter your first name: anna

Все, что нам остается сделать, - поприветствовать пользо­вателя по имени. Мы хотим, чтобы вывод выглядел так:

Hello, anna... and goodbye!

Понимаю, это не верх совершенства. Но терпение - мы только начали. Позже мы научимся более изящным вещам.

Первый шаг для вывода приветствия - перенаправить его на следующую строку. Мы сделаем это, написав символ новой строки в cout:

Cout « ' n';

Символы обозначаются двумя апострофами. Существует две разновидности символов: печатные символы: буквы (' а', 'А' и т. д.), числа и знаки препинания ('; ', ' -' и т. д.), и не­печатные символы: символ перевода строки (' п•) или табу­ляция ('t'). Поскольку нет символьного представления непечатных символов, самый общий пример - символ пере­вода строки и табуляция, они представляются специальной последовательностью из двух символов.

Теперь, перейдя на новую строку, мы хотим воспроизвес­ти Hello:

Cout « "Hello, ";

Дальше нам нужно вывести имя пользователя. Оно сохра­нено в строковом объекте user_name. Как мы сделаем это? Так же, как и с другими типами:

Cout « user_name;

Наконец, мы завершаем приветствие, сказав «прощай» (обратите внимание, что строка символов может содержать оба вида: как печатные, так и непечатные символы):

Cout « " ... and goodbye!n";

В основном, все встроенные типы выводятся тем же пу­тем - помещаем значение справа от оператора вывода. На­пример,

Cout « "3 + 4 = "; cout « 3 + 4;

Cout « "n";

Дает следующий вывод:

3 + 4 = 7

Так же, как мы определили новые типы класса для ис­пользования в приложении, проводим привязку оператора вывода для каждого класса. Это позволяет пользователям класса выводить его отдельные объекты совершенно одина­ковым образом со встроенными типами данных.

Вместо написания отдельных выводов каждый на своей строке мы можем объединить их в одно предложение:

Cout « "п" « "Hello, " « user_name

« " ... and goodbye!n";

В завершении мы можем завершить main (), используя выражение return (возврат):

Return 0;

Return - ключевое слово С++. Выражение, следующее за ним, в данном случае «0», представляет результат выполнения функции. Напомню, что возвращаемое функцией значение «0» говорит об успешном завершении работы.

Соберем кусочки вместе - получим нашу первую завер­шенную программу на С++:

#include <iostream> tiinclude <string>

Using namespace std; // пока не объясняю этого —

Int main(){ string user_name;

Cout « "Please enter your first name: ";

Cin » user_name; cout « "n" « "Hello, " « user_name

« " ... and goodbye!n"; return 0;}

После компиляции при выполнении этот код произведет следующее (мой ввод подсвечен жирным шрифтом):

Please enter your first name: anna Hello, anna... and goodbye!

Одно выражение я не пояснил:

Using namespace std;

Посмотрим, смогу ли я объяснить это, не напугав вас. (Сделайте глубокий вдох!), using и namespace - ключевые слова С++, std - имя стандартной библиотеки namespace. Все, выбираемое из стандартной библиотеки (как объекты строкового класса, класса iostream - cout и сіп) заключено внутри, std namespace. Конечно, ваш следующий вопрос: а что такое namespace?

Namespace - метод упаковки библиотечных имен, при ко­тором они могут быть использованы в окружении пользова­тельской программы без появления коллизий. (Коллизия имен обнаруживается, когда есть два использования одно­го и того же имени в приложении, так что программа не может различить их. Когда такое случается, программа не может продолжать работу, пока не разрешится кон­фликт имен). Namespaces - способ, ограждающий види­мость имен.

Для использования объектов строкового класса и класса iostream - сіп и cout - внутри нашей программы мы должны не только включить файлы заголовков string и iostream, но так же сделать имена видимыми с std namespace. Использова­ние директивы:

Using namespace std;

Простейший метод сделать имена внутри namespace (про­странство имен) видимыми.

Умный дом

Немного О программировании на С++

Поскольку при программировании микроконтроллера я ис­пользовал язык С, мне показалось уместным добавить хотя бы несколько слов о языке. Но я не сделаю это лучше, чем С. Липпман. Когда мне понадобилось …

Цоколевка контроллера PIC16F628A

—- RA1/AN1 ]—RAO/ANO ]—- RA7/OSC1 /CLKIN ]—RA6/SDC2/CLKOUT — VDD RB7A10SI/PGD — RB6A1 ОБОДІ CKI/PGC j—RB5 RB4/PGM PDIPSOIC О KJ 1 18 2 17 3 16 4 15 5 14 6 …

Как с нами связаться:

Украина:
г.Александрия
тел. +38 05235 7 41 13 Завод
тел./факс +38 05235  77193 Бухгалтерия
+38 067 561 22 71 — гл. менеджер (продажи всего оборудования)
+38 067 2650755 - продажа всего оборудования
+38 050 457 13 30 — Рашид - продажи всего оборудования
e-mail: msd@inbox.ru
msd@msd.com.ua
Скайп: msd-alexandriya

Схема проезда к производственному офису:
Схема проезда к МСД

Представительство МСД в Киеве: 044 228 67 86
Дистрибьютор в Турции
и странам Закавказья
линий по производству ПСВ,
термоблоков и легких бетонов
ооо "Компания Интер Кор" Тбилиси
+995 32 230 87 83
Теймураз Микадзе
+90 536 322 1424 Турция
info@intercor.co
+995(570) 10 87 83

Оперативная связь

Укажите свой телефон или адрес эл. почты — наш менеджер перезвонит Вам в удобное для Вас время.