V
V
Vasyl Boyko2016-10-05 09:15:47
OOP
Vasyl Boyko, 2016-10-05 09:15:47

How to explain a piece of C++ code?

How to explain a piece of C++ code?
File Unit1.h

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcallTForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

File Unit1.cpp
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
this->Close();
}
//---------------------------------------------------------------------------

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
Mercury13, 2016-10-05
@ferdasfarmazone

All this code (with the exception of Close) is auto-generated.

///// Защита от повторного включения
#ifndef Unit1H
#define Unit1H

///// Хедеры VCL. Причём всё это сделано так, чтобы упростить написание ценой удлинения
///// компиляции. Более громоздкий, но и более удачный вариант.
///// В H:
/////   namespace Controls { class TLabel; }
/////   using namespace Controls;
///// В CPP:
/////   #include <Controls.hpp>
///// Вот таким образом можно (было) избавиться от каскадного подключения
///// хедера Controls. А то каждый, кто использует главной форму,
///// автоматически подключает эти хедеры.
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
///// Только от Forms.hpp избавиться таким макаром нельзя:
///// мы наследуемся от TForm.
#include <Forms.hpp>

///// Класс формы. Все формы наследуются от TForm.
class TForm1 : public TForm
{
   ///// Особое право доступа Borland, для совместимости с Delphi.
   ///// Поля и свойства published не просто public, но включаются
   ///// в структуру рефлексии (aka reflection или introspection)
   ///// и программа о них знает при выполнении.
   ///// Применительно к формам — published-поля доступны
   ///// загрузчику.
__published: // IDE-managed Components
   ///// Компоненты, которые мы установили на форме редактором.
TLabel *Label1;
TButton *Button1;
   ///// События, которые мы прописали в редакторе.
   ///// __fastcall — модель вызова, аналогичная Delphi.
   ///// Именно такая модель вызова принята в обработчиках
   ///// событий.
void __fastcall Button1Click(TObject *Sender);
   ///// Пользователь пока не прописал никаких своих
   ///// полей и функций.
private: // User declarations
public: // User declarations
   ///// Конструктор. Раз уж у формы нетривиальный конструктор —
   ///// по правилам Си++ его надо повторить в подклассе.
   ///// Снова-таки, модель вызова __fastcall: в формах Delphi
   ///// используются т.н. виртуальные конструкторы, 
   ///// когда по имени класса можно создать объект этого класса.
   ///// Фабричный метод, только немного лучше.
   ///// Но это значит: у всех подчинённых классов
   ///// должен быть один и тот же набор параметров
   ///// и модель вызова.
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
///// Как известно, переменная объявляется один раз.
///// Поскольку хедер может подключаться к огромному числу CPP,
///// её объявляют как extern (она есть, но в другом месте).
///// Макрос PACKAGE раскрывается в __declspec(package),
///// чтобы эту штуку можно было собрать как пакет.
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

The call model is how technically we call a subroutine. What memory and what registers are used for this, and who cleans up the stack. Search Wikipedia.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question