Тема 9. Синтаксис языка Си++.
Основные синтаксические правила записи программы на С++:
- Прописные и строчные буквы считаются разными символами. Поэтому, переменные A1 и a1 будут совершенно разными. При записи можно использовать латинские буквы, цифры, символ подчеркивания. Нельзя начинать идентификатор с цифры и внутри не может содержатся пробел. Длина идентификатора неограничен.
- Многострочные комментарии в тексте заключаются в скобки вида /*текст комментария*/. Комментарий на одну строку начинается с символов “//” и знак действует только до конца текущей строки.
- Каждое предложение языка заканчивается символом “;”
- В строке может размещаться несколько операторов;
- Группу операторов можно объединять в один оператор заключая их в фигурные скобки { }.
- Все используемые типы, константы, переменные, функции должны быть объявлены или описаны до их первого использования. Объявление моно выполнить в любом месте текста программы.
Программа на С++ состоит из объявлений (переменных, типов, классов, функций) и описаний функций. Среди функций всегда имеется главная main для консольных приложений или WinMain для приложений Windows. Именно эта главная функция выполняется в начале работы программы. Программы строятся по модульному принципу и состоят из множества модулей. В С++ Builder все объекты компонентов размещаются в объектах - формах. Для каждой формы создается отдельный модуль. Именно в модулях и решаются программные задачи. В заголовочный файл с расширением .h размещаются объявление классов, функций, переменных и т.д. В файле реализации с расширением .cpp содержатся описания функций. После того как программа написана на ее основе формируется исполняемый модуль – файл с расширением .exe. Его можно загружать на выполнение.
Структура головного файла проекта.
Чтобы увидеть код головного файл проекта нужно выполнить в среде С++ Builder команду Project | View Source. Головной модуль редко редактируют.
// директивы препроцессора
#include <vcl.h> /* подключает объявления, используемые в библиотеке визуальных компонентов C++Builder*/
#pragma hdrstop //вызывает действия, зависящие от указанной опции
#include <tchar.h>
//макросы подключающие файлы ресурсов и форм
USEFORM("UDiapZnach.cpp", Form3); //подлючение формы
//функция main
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) /*главная функция программы*/
{
try // попытка старта программы
{
Application->Initialize(); /*инициализирует объекты компонентов*/
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm3), &Form3); //создает объект формы
Application->Run();// запуск программы на выполнение
}
catch (Exception &exception) /*вывести исключения при аварийных ситуациях запуска программы.*/
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0; // завершение программы
Структура файлов модулей форм:
Каждая форма состоит из двух файлов: заголовочного (U*.h) и файла реализации (U*\.cpp).
// Заголовочный файл
#ifndef UDiapZnachH //условная компиляция
#define UDiapZnachH //вызов макроса
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
//сюда размещаются дополнительные директивы подключения модулей
class TForm3 : public TForm //объявление класса формы
{
__published: // IDE-managed Components
// размещенные на форме компоненты
TMemo *Memo1;
TBitBtn *BitBtn1;
void __fastcall BitBtn1Click(TObject *Sender);
private: // User declarations
/*объявление типов, переменных, функций включаемых в класс формы, но не доступных для других модулей*/
public: // User declarations
/*объявление типов, переменных, функций включаемых в класс формы, доступных для всех модулей*/
__fastcall TForm3(TComponent* Owner);
};
extern PACKAGE TForm3 *Form3;
/*объявление типов, переменных, функций не включаемых в класс формы, доступ при соблюдении определенных условий*/
#endif //конец условной компиляции
//Файл реализации
#include <vcl.h>
#pragma hdrstop //вызывает действия, зависящие от указанной опции
#include <stdio.h>
#include <math.h>
#include "UDiapZnach.h"
//сюда размещаются дополнительные директивы подключения модулей
#pragma package(smart_init)
#pragma resource "*.dfm"
//Объявление объекта формы
TForm3 *Form3;
// вызов конструктора формы
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
/*сюда можно поместить операторы, которые должны выполняться при создании формы*/
}
/*сюда помещаются объявления типов и переменных доступ к которым из других модулей возможен при соблюдении некоторых дополнительных условий*/
void __fastcall TForm3::BitBtn1Click(TObject *Sender)
/*процедура исполняемая при нажатии кнопки BitBtn1 на форма TForm3*/
{
char r1[80];
Memo1->Lines->Clear();
for (int i=1; i < 10; i++) {
int y=i*i;
sprintf(r1,"%5d ^ 2 = %5d ",i,y);
Memo1->Lines->Add(r1);
}
}
//---------------------------------------------------------------------------
Некоторые основные правила:
- В реализации функций-элементов должна добавляться ссылка на класс с помощью операции разрешения области действия (::).
- Функции –элементы объявляются и описываются с применением опции компилятора _fastcall.
- В функциях-элементах обращение к другим функциям-элементам и данным –элементам того же класса может осуществляться без указания на объект.
- В функциях не являющихся элементами класса данного объекта доступ к функциям-элементам (методам) и данным –элементам (свойствам) осуществляется через указатель на объект с помощью операции (->).