# Вопросы для проработки:
1. <u>A component's properties are set in ...</u>
**Object Inspector**
Свойства компонента устанавливаются в...
Object Inspector
2. <u>A special method that is called once when a class' instance is created:</u>
**the constructor**
Особый метод, который вызывается один раз при создании экземпляра класса:
конструктором
3. <u>In Object-oriented programming, a set of data and methods to manipulate the data is:</u>
**a class**
В объектно-ориентированном программировании набор данных и методов для их обработки:
класс
4. <u>A principle of OOP, a mechanism that links together the code and the data it manipulates:</u>
**encapsulation**
Принцип ООП, механизм, который связывает код и данные, которыми он управляет:
инкапсуляцией
5. <u>A class that is an ancestor of all components in VCL:</u>
**TComponent**
Класс, который является предком всех компонентов в VCL:
TComponent.
6. <u>A method of TControl class which is redraw the control on the screen:</u>
**Refresh(Repaint)**
Метод класса TControl, который перерисовывает контрол на экране:
Refresh(Repaint) (Invalidate)
7. <u>The part of a class that contains the closed class' members:</u>
**private**
Часть класса, которая содержит закрытые члены класса:
private (Implementation)
8. <u>A constructor name of ТPopupMenu class:</u>
**TPopupMenu**
Название конструктора класса ТPopupMenu:
TPopupMenu::TPopupMenu(TComponent\* AOwner)
9. <u>A value of what type does the constructor return?</u>
**A constructor does not return a value**
Какого типа значение возвращает конструктор?
Конструктор не возвращает значение
10. <u>In OOP, an instance of a class in a memory is:</u>
**An instance of a class is an _object_ in memory that contains data and methods defined in the class and that can be used to perform operations on the object.**
В ООП экземпляр класса в памяти это:
экземпляр класса представляет собой объект в памяти, который содержит данные и методы, определенные в классе, и который можно использовать для выполнения операций с объектом.
11. <u>A principle of OOP, a mechanism by which one object (of a derived class) acquires the properties of another object (parent, base class):</u>
**Inheritance**
Принцип ООП, механизм, при котором один объект (производного класса) приобретает свойства другого объекта (родительского, базового класса):
наследованием
12. <u>All descendants (child classes) of this class can be added to the component palette:</u>
**TComponent**
Все потомки (дочерние классы) этого класса могут быть добавлены на палитру компонентов:
TComponent
13. <u>A method of TForm class that sorts all child MDI forms by cascading them:</u>
**Cascade**
Метод класса TForm, который сортирует все дочерние MDI-формы, располагая их каскадом:
Cascade
14. <u>The part of a class that contains the open class' members:</u>
**Public**
Часть класса, которая содержит открытые члены класса:
Public
15. <u>A constructor name of TOpenDialog class:</u>
**TOpenDialog**
Название конструктора класса TOpenDialog:
TOpenDialog
16. <u>A value of what type does the destructor return?</u>
**The destructor does not return a value.**
Какого типа значение возвращает деструктор?
Деструктор не возвращает значение.
17. <u>A special function of a class that specifies operations on objects data (specifies its behavior):</u>
**Method**
Особая функция класса, которая определяет операции с данными объекта (определяет его поведение):
Метод
18. <u>A principle of OOP, a special mechanism that protects data from arbitrary access of other external codes:</u>
**Encapsulation**
Принцип ООП, специальный механизм, который защищает данные от произвольного доступа других внешних кодов:
Инкапсуляция
19. <u>The base class of all visual components is:</u>
**TControl**
Базовый класс всех визуальных компонентов:
TControl
20. <u>A property of TApplication class that defines the main form of an application:</u>
**MainForm**
Свойство класса TApplication, которое определяет главную форму приложения:
MainForm
21. <u>The part of a class that contains the protected class' members:</u>
**Protected**
Часть класса, которая содержит защищенные члены класса:
Защищенная
22. <u>A constructor name of TDEdit class:</u>
**TDEdit**
Название конструктора класса TDEdit:
TDEdit
23. <u>The initialization of all elements of a class (common for all class instances) is made in …</u>
**The class constructor**
Инициализация всех элементов класса (общая для всех экземпляров класса) выполняется в...
Конструктор класса
24. <u>In OOP, a variable of some type that characterizes internal status of an object:</u>
**Member variable or instance variable (property)**
В ООП переменная некоторого типа, которая характеризует внутреннее состояние объекта:
Переменная-член класса или переменная экземпляра. (property)
25. <u>A principle of OOP, a mechanism that allows to use the same interface for a common class of actions:</u>
**Polymorphism**
Принцип ООП, механизм, который позволяет использовать одинаковый интерфейс для общего класса действий:
Полиморфизм
26. <u>An interface between programmer and Windows operating system is defined through next class:</u>
**TApplication**
Интерфейс между программистом и операционной системой Windows определяется через следующий класс:
TApplication
27. <u>A method of TControl class that makes the control invisible:</u>
**Hide**
Метод класса TControl, который делает контрол невидимым:
Hide
28. <u>The part of a class (С++ Builder) that contains the published class' members:</u>
**__published**
Часть класса (С++ Builder), которая содержит опубликованные члены класса:
__published
29. <u>A constructor name of TBaseData class:</u>
**TBaseData**
Название конструктора класса TBaseData:
TBaseData
30. <u>A destructor name of TMainMenu class:</u>
**~TMainMenu**
Название деструктора класса TMainMenu:
~TMainMenu
31. **<u>OOP: a message from the operating system to an application that if occurs when some <span style="background-color: lime">external actions</span> are made:</u>**
**event**
ООП: сообщение от операционной системы к приложению, которое возникает при выполнении некоторых <span style="background-color: lime">внешних действий</span>:
event
32. <u>In polymorphism principle: selecting of needed method (for specific object) is performed by …</u>
**Virtual table or VTable (dynamic dispatch)**
В принципе полиморфизма: выбор нужного метода (для конкретного объекта) производится через..
**Virtual table or VTable** (dynamic dispatch)
33. <u>Class declaration: if an ancestor-class is omitted then the ancestor-class is …</u>
**TObject**
Объявление класса: если предок не указан, то предком является ...
TObject
34. <u>A method of TControl class that sets the value of Visible property to True:</u>
**Show**
Метод класса TControl, который устанавливает значение свойства Visible в True:
Show
35. <u>The part of a class that contains the declarations of class' members accessible to class' <span style="background-color: lime">own methods</span> and <span style="background-color: magenta">derived methods:</span></u>
**protected section**
Часть класса, которая содержит объявления членов класса, доступных <span style="background-color: lime">собственным методам</span> класса и производным методам:
раздел protected
36. <u>A constructor name of TInfSetter class:</u>
**TInfSetter**
Название конструктора класса TInfSetter:
TInfSetter
37. <u>The destructor must be defined in a class when the object contains:</u>
**Dynamically allocated memory or other resources**
Деструктор должен быть определен в классе, когда объект содержит:
Динамически выделяемая память или другие ресурсы
38. <u>Explain the concept of encapsulation in C++ classes:</u>
**Encapsulation is the process of <span style="background-color: lime">hiding</span> the <span style="background-color: magenta">implementation details</span> of a class and only exposing the necessary interfaces to the outside world.**
Объясните концепцию инкапсуляции в классах C++:
Инкапсуляция — это процесс <span style="background-color: lime">сокрытия</span> <span style="background-color: magenta">деталей реализации</span> класса и предоставления доступа к необходимым интерфейсам только снаружи.
39. <u>All class members described in private section are available for use ...:</u>
**only inside this class**
Все члены класса, описанные в разделе private, доступны для использования ...:
только внутри этого класса
40. <u>In the next class declaration what is lengthi? class Triangle { public: int x1,1, x2,y2,x3,y3; float length, length2, length3; void info) { cout<<"InYou are working with class Triangle\\n"; }};</u>
**field**
В следующем объявлении класса что такое lengthi? class Triangle { public: int x1,1, x2,y2,x3,y3; float length, length2, length3; void info) { cout<<"Вы работаете с классом Triangle\\n"; }};
поле
41. <u>In the next class declaration what is info()? class Triangle {public: int x1,y1,x2,y2,x3,y3; float length1, length2, length3; void info() { cout<<"\\nYou are working with class Triangle\\n"; }</u>
**method**
В следующем объявлении класса что такое info()? _class Triangle {public: int x1,y1,x2,y2,x3,y3; float length1, length2, length3; void info() { cout<<"\\nYou are working with class Triangle\\n"; }_
метод
42. <u>ID identifier is declared with next class MyClass. Find the error, if exists:</u>
**ID.x1 = 15.**
Идентификатор ID объявлен со следующим классом MyClass. Найдите ошибку, если она есть:
ID.x1 = 15.
43. <u>All class members described in the private section are available for use only inside this class:</u>
**Classes in C++ are abstractions that <span style="background-color: lime">describes methods, properties of objects</span> that do not exist yet.**
Все члены класса, описанные в частной секции, доступны только внутри этого класса.
Классы в C++ — это абстракции, <span style="background-color: lime">описывающие методы, свойства объектов</span>, которые еще не существуют.
44. <u>Explain the difference between public, private, and protected access specifiers in C++ classes.</u>
**Public members can be accessed by <span style="background-color: lime">any function</span>, private members can <span style="background-color: magenta">only be accessed by member functions of the same class</span>, and protected members can <span style="background-color: cyan">only be accessed by member functions and friend functions.</span>**
Объясните разницу между спецификаторами доступа public, private и protected в классах C++.
Члены public доступны <span style="background-color: lime">любой функции</span>, члены private <span style="background-color: magenta">доступны только функциям-членам того же класса</span>, а члены protected доступны <span style="background-color: cyan">только функциям-членам и функциям-друзьям.</span>
45. <u>How do you define a destructor in a C++ class? When does it get called?</u>
**The correct way to define a destructor in a C++ class is by using the "~" tilde followed by the class name. It gets called automatically when an object is destroyed or goes out of scope.**
Как определить деструктор в классе C++? Когда он вызывается?
Правильный способ определения деструктора в классе C++ — использовать тильду "~", за которой следует имя класса. Он вызывается автоматически, когда объект уничтожается или выходит из области видимости.
46. <u>How do you define member functions inside a class declaration and outside a class declaration in C++?</u>
**Member functions are defined inside a class using the "::" scope resolution operator.**
Как определить функции-члены внутри объявления класса и вне объявления класса в C++?
Функции-члены определяются внутри класса с использованием оператора разрешения области "::".
47. <u>What are access specifiers in C++ classes? Provide examples.</u>
**Access specifiers define the visibility of class members.**
Что такое спецификаторы доступа в классах C++? Приведите примеры.
Спецификаторы доступа определяют видимость членов класса.
48. <u>What is the difference between a class and an object in C++?</u>
**A class serves as a <span style="background-color: lime">blueprint</span> for creating objects. It defines the <span style="background-color: magenta">properties (data members)</span> and <span style="background-color: cyan">behaviors (member functions)</span> that objects of that class will have. An object, on the other hand, is a specific <span style="background-color: yellow">instance of a class</span> created in memory. It has its own set of data members and can perform actions defined by the class's member functions.**
В чем разница между классом и объектом в C++?
Класс служит <span style="background-color: lime">чертежом</span> для создания объектов. Он определяет <span style="background-color: magenta">свойства (члены данных)</span> и <span style="background-color: cyan">поведение (функции-члены)</span>, которыми будут обладать объекты этого класса. Объект, с другой стороны, представляет собой конкретный <span style="background-color: yellow">экземпляр класса</span>, созданный в памяти. Он имеет свой собственный набор членов данных и может выполнять действия, определенные функциями-членами класса.
49. <u>What is a constructor in C++? How is it different from a normal member function?</u>
**A constructor is a special member function that is called automatically when an object is created, used to initialize the object. It is different from a normal member function as it <span style="background-color: lime">has the same name as the class and no return type.</span>**
Что такое конструктор в C++? Чем он отличается от обычной функции-члена?
Конструктор — это специальная функция-член, которая вызывается автоматически при создании объекта и используется для его инициализации. Он отличается от обычной функции-члена тем, что <span style="background-color: lime">имеет такое же имя, как класс, и не имеет возвращаемого типа.</span>
50. <u>For the class definition given below, find the valid statement. class TCls {public: int fl1; TCls(); TCls(int value) {fl1 = value;}</u>
**The class member fl1 is public and can be accessed by any functions.**
Для данного ниже определения класса найдите верное утверждение. class TCls {public: int fl1; TCls(); TCls(int value) {fl1 = value;}
**The class member fl1 is public and can be accessed by any functions.**
Член класса fl1 является публичным и доступен любым функциям.
51. <u>What is created with the help of concrete class?</u>
**object**
Что создается с помощью конкретного класса?
объект
52. <u>All class members described in this section are available for use only inside this class:</u>
**private**
Все члены класса, описанные в этом разделе, доступны для использования только внутри этого класса:
private
53. <u>The self-contained building blocks that are carried on the form to create your applications:</u>
**Components**
Самодостаточные строительные блоки, которые переносятся на форму для создания приложений:
Components
54. <u>What are the actions performed by the component (what a component can do)?</u>
**Methods**
Какие действия выполняет компонент (что может делать компонент)?
Methods
55. <u>Major principle of an OOP that allows using same names of identifiers for the different functionality</u>
**Polymorphism**
Основной принцип ООП, позволяющий использовать одинаковые имена идентификаторов для различных функциональных возможностей
Полиморфизм
56. <u>For the class definition given below, find the valid statement.
class Cl1
public:
float element;
private:
Cl1 (:) );</u>
**the class is described incorrectly-the class constructor is always declared in a public**
Для приведенного ниже определения класса найдите верное утверждение.
class Cl1
public:
float element;
private:
Cl1 (:) );
класс описан неверно - конструктор класса всегда объявляется в разделе public
57. <u>For the class definition given below, find the valid statement.
class ClassX
(public:
float element;
ClassX( (:)
ClassX(fiont x) (element x;) };</u>
**when creating an object from a class ClassX, the constructor will be called depending on the arguments the class ClassX is described incorrectly: methods with the same name cannot be described**
Для приведенного ниже определения класса найдите верное утверждение.
class ClassX
(public:
float element;
ClassX( (:)
ClassX(fiont x) (element x;) };
при создании объекта из класса ClassX конструктор будет вызван в зависимости от аргументов Класс ClassX описан неверно: методы с одинаковыми именами не могут быть описаны
# Теоретические знания
1. Иерархия наследования классов в Borland Builder и для чего каждый из них нужен:
TObject
|-- TPersistent
|-- TComponent
|-- TControl
| |-- TWinControl
| |-- TGraphicControl
| |-- TCustomControl
| |-- TCustomEdit
| |-- TCustomListBox
| |-- TCustomCombo
| |-- TScrollingWinControl
| |-- TCustomForm
| |-- TForm
| |-- TCustomGrid
|-- TMenuItem
|-- TMenu
|-- TMainMenu
|-- TPopupMenu
|-- TStrings
|-- TStringList
| Класс | Описание | Описание (англ.) |
|---------------------|------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|
| TObject | <u>Базовый класс</u> всех остальных классов в VCL | The <u>base class</u> for all other classes in VCL |
| TPersistent | Базовый класс для всех классов, которые могут <span style="background-color: lime">сохранять</span> свое <span style="background-color: magenta">состояние</span> | The base class for all classes that can <span style="background-color: lime">save</span> their <span style="background-color: magenta">state</span> |
| TComponent | Базовый класс для всех <span style="background-color: cyan">невизуальных компонентов</span> (таймеры, источники данных и т.д.) | The base class for all <span style="background-color: cyan">non-visual components</span> (timers, data sources, etc.) |
| TControl | Базовый класс для всех <span style="background-color: yellow">визуальных компонентов</span> (кнопки, метки, поля ввода и т.д.) | The base class for all <span style="background-color: yellow">visual components</span> (buttons, labels, input fields, etc.) |
| TWinControl | Класс для компонентов, которые могут <span style="background-color: lime">получать фокус ввода</span> и <span style="background-color: magenta">обрабатывать события</span> | The class for components that can <span style="background-color: lime">receive input focus</span> and <span style="background-color: magenta">handle events</span> |
| TGraphicControl | Класс для <span style="background-color: cyan">нефокусируемых графических компонентов</span> (образы, фигуры и т.д.) | The class for <span style="background-color: cyan">non-focusable graphic components</span> (images, shapes, etc.) |
| TCustomControl | Класс для создания <span style="background-color: yellow">собственных визуальных компонентов</span> | The class for creating <span style="background-color: yellow">custom visual components</span> |
| TScrollingWinControl| Класс для компонентов с <span style="background-color: lime">прокруткой</span> (списки, сетки и т.д.) | The class for components with <span style="background-color: lime">scrolling</span> (lists, grids, etc.) |
| TForm | Класс для представления <span style="background-color: magenta">окон и диалогов</span> | The class for representing <span style="background-color: magenta">windows and dialogs</span> |
| TMenu | Базовый класс для всех <span style="background-color: cyan">компонентов меню</span> | The base class for all <span style="background-color: cyan">menu components</span> |
| TMainMenu | Класс для <span style="background-color: yellow">главного меню</span> приложения | The class for the application's <span style="background-color: yellow">main menu</span> |
| TPopupMenu | Класс для <span style="background-color: lime">контекстных (всплывающих) меню</span> | The class for <span style="background-color: lime">context (pop-up) menus</span> |
#
2. <u>Геттеры и сеттеры</u> - это <span style="background-color: lime">специальные методы</span> для <span style="background-color: magenta">доступа к приватным полям класса</span>. <span style="background-color: cyan">Геттер возвращает значение поля</span>, а <span style="background-color: yellow">сеттер устанавливает новое значение</span>.
<u>Getters and setters</u> are <span style="background-color: lime">special methods</span> for <span style="background-color: magenta">accessing private fields of a class</span>. A <span style="background-color: cyan">getter returns the value of a field</span>, and a <span style="background-color: yellow">setter sets a new value</span>.
Пример:
```cpp
class MyClass {
private:
int value; // с этим значением работает геттер и сеттер
//оно в private и напрямую его трогать нельзя
public:
// геттер
int getValue() {
return value; // он возвращает значение
}
// сеттер
void setValue(int newValue) {
value = newValue; //а тут он устанавливает значение
}
};
```
#
3. <u>Абстракция в ООП</u> - это <span style="background-color: lime">выделение существенных характеристик объекта</span> и <span style="background-color: magenta">игнорирование несущественных</span>. Виды абстракции:
- <u>Абстрактные классы</u> - базовые классы, которые содержат <span style="background-color: yellow">абстрактные методы (без реализации)</span> и не могут создавать объекты.
- <u>Интерфейсы</u> - <span style="background-color: magenta">полностью абстрактные классы</span>, содержат только абстрактные методы. <span style="background-color: cyan">Реализуются через наследование</span>.
<u>Abstraction in OOP</u> is the <span style="background-color: lime">selection of essential characteristics of an object</span> and <span style="background-color: magenta">ignoring the non-essential ones</span>. Types of abstraction:
- <u>Abstract classes</u> are base classes that contain <span style="background-color: yellow">abstract methods (without implementation)</span> and cannot create objects. An example is the Animal class.
- <u>Interfaces</u> - <span style="background-color: magenta">fully abstract classes</span>, contain only abstract methods. They are <span style="background-color: cyan">implemented through inheritance</span>. Example - interface ISerializable.
Пример - класс Animal:
```cpp
class Animal {
public:
virtual void makeSound() = 0; // чисто виртуальный (абстрактный) метод
void sleep() { // обычный метод с реализацией
cout << "Animal is sleeping..." << endl;
}
};
class Cat : public Animal {
public:
void makeSound() override { // обязательная реализация в производном классе
cout << "Meow!" << endl;
}
};
```
Пример - интерфейс ISerializable:
```cpp
class ISerializable {
public:
virtual void serialize() = 0;
virtual void deserialize() = 0;
};
class MyClass : public ISerializable {
public:
void serialize() override {
// Реализация сериализации
}
void deserialize() override {
// Реализация десериализации
}
};
```
#
4. <u>Перегрузка методов</u> - <span style="background-color: lime">создание методов с одинаковым именем</span>, но <span style="background-color: magenta">разными параметрами</span>. <span style="background-color: cyan">Компилятор сам выбирает нужный метод</span> в зависимости от <span style="background-color: yellow">переданных аргументов</span>.
<u>Method overloading</u> - <span style="background-color: lime">creating methods with the same name</span> but <span style="background-color: magenta">different parameters</span>. <span style="background-color: cyan">The compiler itself selects the necessary method</span> depending on the <span style="background-color: yellow">passed arguments</span>.
```cpp
class MyMath {
public: // вот тут происходит перегрузка
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
// два метода, с разными параметрами
// но с одинаковыми именами
};
MyMath math;
int res1 = math.add(5, 10);
double res2 = math.add(1.5, 2.8);
```
#
5. Переопределение (override) в ООП - это <span style="background-color: lime">механизм</span>, который позволяет <span style="background-color: magenta">подклассу (классу-наследнику)</span> <span style="background-color: cyan">изменять реализацию методов</span>, унаследованных от <span style="background-color: yellow">базового класса (класса-родителя)</span>, сохраняя при этом <span style="background-color: pink">сигнатуру метода (имя, типы и количество параметров, тип возвращаемого значения)</span>.
Override in OOP is a <span style="background-color: lime">mechanism</span> that allows a <span style="background-color: magenta">subclass (successor class)</span> to <span style="background-color: cyan">change the implementation of methods</span> inherited from the <span style="background-color: yellow">base class (parent class)</span>, while preserving the <span style="background-color: pink">method signature (name, types and number of parameters, type of return value)</span>.
Чтобы переопределить метод в C++, нужно в подклассе заново объявить метод с тем же именем и сигнатурой, что и в базовом классе, и дать ему новую реализацию.
При этом, чтобы явно показать, что мы хотим именно переопределить метод, а не случайно создать новый, используется ключевое слово `override`.
Пример:
```cpp
// объявляем базовый класс Животное
class Animal {
public:
virtual void makeSound() {
// virtual используется в базовом классе
// чтобы их можно было переопределить
std::cout << "Some sound" << std::endl; // некоторый звук
}
};
// Теперь его наследники Кот и Собака
class Cat : public Animal {
public:
// переопределяем для кошки
// мяуканье вместо некоторого звука
void makeSound() override {
std::cout << "Meow" << std::endl;
}
};
class Dog : public Animal {
public:
// переопределяем для собаки
// мяуканье вместо некоторого звука
void makeSound() override {
std::cout << "Woof" << std::endl;
}
};
```
Теперь, если мы создадим объекты этих классов и вызовем `makeSound()`, мы получим разное поведение в зависимости от фактического типа объекта:
```cpp
Animal* animal1 = new Cat();
Animal* animal2 = new Dog();
animal1->makeSound(); // Выведет "Meow"
animal2->makeSound(); // Выведет "Woof"
```
#
6. <u>Event (событие)</u> - <span style="background-color: lime">механизм для уведомления объекта</span> о <span style="background-color: magenta">произошедшем событии</span>. События <span style="background-color: cyan">инициируются источником события</span> и <span style="background-color: yellow">обрабатываются получателями</span>. Пример - событие onClick у кнопки.
<u>Event</u> - A <span style="background-color: lime">mechanism for notifying an object</span> that an <span style="background-color: magenta">event has occurred</span>. Events are <span style="background-color: cyan">initiated by the event source</span> and <span style="background-color: yellow">processed by the event receivers</span>. Example - onClick event of a button.
#
7. <u>Основные классы для работы с датой/временем</u>:
- TDateTime - класс для <span style="background-color: lime">хранения даты и времени</span>
- TDate - класс для <span style="background-color: magenta">представления даты</span>
- TTime - класс для <span style="background-color: cyan">представления времени</span>
- TTimeStamp - структура для <span style="background-color: yellow">хранения даты/времени с высокой точностью</span>
<u>Basic classes for working with date/time</u>:
- TDateTime - a class for <span style="background-color: lime">storing date and time</span>
- TDate - class for <span style="background-color: magenta">representing date</span>
- TTime - class for <span style="background-color: cyan">representing time</span>
- TTimeStamp - structure for <span style="background-color: yellow">storing date/time with high accuracy</span>
Основные методы:
- Now() - возвращает <span style="background-color: lime">текущую дату и время</span>
- DateToStr()/TimeToStr() - преобразуют <span style="background-color: magenta">дату/время в строку</span>
- StrToDate()/StrToTime() - преобразуют <span style="background-color: cyan">строку в дату/время</span>
- DayOf()/MonthOf()/YearOf() - извлекают <span style="background-color: yellow">день/месяц/год из даты</span>
- EncodeDate()/EncodeTime() - создают <span style="background-color: pink">дату/время из отдельных компонентов</span>
Main methods:
- Now() - returns the <span style="background-color: lime">current date and time</span>
- DateToStr()/TimeToStr() - converts <span style="background-color: magenta">date/time into a string</span>
- StrToDate()/StrToTime() - converts <span style="background-color: cyan">string to date/time</span>
- DayOf()/MonthOf()/YearOf() - extract <span style="background-color: yellow">day/month/year from a date</span>
- EncodeDate()/EncodeTime() - create <span style="background-color: pink">date/time from separate components</span>
#
8. <span style="background-color: yellow">Ошибки во время выполнения (runtime errors)</span> возникают при работе программы и <span style="background-color: magenta">приводят к её аварийному завершению</span>.
<span style="background-color: cyan">Исключения</span> - это специальные объекты, которые <span style="background-color: lime">генерируются в месте возникновения ошибки</span> и <span style="background-color: pink">перехватываются в специальных блоках</span>.
<span style="background-color: yellow">Runtime errors (runtime errors)</span> occur when a program is running and <span style="background-color: magenta">lead to its crash</span>.
<span style="background-color: cyan">Exceptions</span> are special objects that are <span style="background-color: lime">generated at the point where the error occurs</span> and are <span style="background-color: pink">captured in special blocks</span>.
Примеры исключений в Borland Builder:
- EDivByZero - деление на ноль
- EInvalidCast - недопустимое приведение типов
- EOutOfMemory - нехватка памяти
- EInvalidPointer - неверный указатель
Examples of exceptions in Borland Builder:
- EDivByZero - division by zero
- EInvalidCast - invalid type conversion
- EOutOfMemory - memory shortage
- EInvalidPointer - invalid pointer
[!] **Приведение ещё может называться словом cast/casting**
Примеры исключений в стандартном C++:
- std::runtime_error - общее исключение <span style="background-color: lime">во время выполнения</span>
- std::logic_error - ошибка в логике программы
- std::invalid_argument - <span style="background-color: magenta">недопустимый аргумент</span> функции
- std::out_of_range - <span style="background-color: cyan">выход за границы диапазона</span>
- std::bad_alloc - ошибка <span style="background-color: yellow">выделения памяти</span>
- std::bad_cast - <span style="background-color: pink">недопустимое приведение типов</span>
Examples of exceptions in standard C++:
- std::runtime_error - general <span style="background-color: lime">runtime</span> exception
- std::logic_error - error in program logic
- std::invalid_argument - <span style="background-color: magenta">invalid argument</span>
- std::out_of_range - <span style="background-color: cyan">range overrun</span>
- std::bad_alloc - <span style="background-color: yellow">memory allocation</span> error
- std::bad_cast - <span style="background-color: pink">invalid type conversion</span>
Использование исключений в Borland Builder:
```cpp
try {
// Потенциально опасный код
// который может завершить программу
int x = 10 / 0;
}
catch (EDivByZero& e) {
// Перехват и обработка исключения
ShowMessage(e.Message);
}
```
Использование исключений в стандартном C++:
```cpp
try {
// Потенциально опасный код
// который может завершить программу
int x = 10 / 0;
}
catch (std::exception& e) {
// Перехват и обработка исключения
std::cout << e.what() << std::endl;
}
```