#include #include // тип данных (множество) // алгебраичекий тип (компонуемые) // абстрактный тип // абстрактный класс // int (4 bytes) // string (16 bytes) typedef struct { int i; char * s; } vasya; typedef union { int i; char * s; } petya; // std::variant // template class point { private: unsigned x; unsigned y; public: void set_i(int a, int b) { x = a; y = b; } using pair = std::pair; // point get_x_y() { // return (point){x, y}; // } }; /* Используя ключевое слово class, согласно принципам абстракции и инкапсуляции создать тип данных, который содержит несколько конструкторов и деструктор. Каждый конструктор должен создавать объект заданного типа, используя данные другого произвольного типа. Деструктор должен освобождать ресурсы, если они были получены объектом при создании или инициализации. */ class array { int *data{nullptr}; size_t n{0}; public: ~array() { delete [] data; } array() { data = new int[10]; n = 10; for (size_t i = 0; i < 10; i++) { data[i] = 0; } } array(const array &obj) { data = new int[obj.n]; n = obj.n; for (size_t i = 0; i < n; i++) { data[i] = obj.data[i]; } } int get(size_t i) { assert(data != nullptr); return data[i]; } }; void f(int x) { x += 1; } void g(int &x) { x += 1; } void h(const int &x) { auto y = x + 1; } int main() { array a; // default ctor; array b = array{}; // copy ctor return 0; }