C конструктор структуры: ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Struct Π² C++? — CodeRoad

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

c++ — На конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ нСльзя ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ использовании std :: string Π² элСмСнтС union структуры

Π£ мСня Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ базовая структура, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ enum ΠΈ union.

typedef struct
{
    enum v{a,b,c}v;
    union w{
        int a;
        bool b;
        std::string c;
    }w;

}Data_Set2;

int main()
{
Data_Set2 val; // Shows errror that the default constructor cannot be referenced
return 0;
}

ΠŸΡ€ΠΈ использовании Ρ‚Π°ΠΊΠΎΠΉ структуры я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΠΊΠΎΠ΄ ошибки C2280, Ρ‡Ρ‚ΠΎ Π½Π° конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ нСльзя ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ. Когда я объявляю структуру Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅

typedef struct
{
    enum v{a,b,c}v;
    union w{
        int a;
        bool b;
        std::string c;
    }; // changed here.

}Data_Set2;

Ошибка большС Π½Π΅ сущСствуСт. Π― Π½Π΅ понимаю ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ этого. ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это происходит

4

D_wanna_B_coder

5 Π€Π΅Π² 2019 Π² 16:11

3 ΠΎΡ‚Π²Π΅Ρ‚Π°

Π›ΡƒΡ‡ΡˆΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚

https://en.cppreference.com/w/cpp/language/union (ΠΈΠ»ΠΈ см. стандарт):

Если объСдинСниС содСрТит нСстатичСский Ρ‡Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ… с Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-Ρ‡Π»Π΅Π½ΠΎΠΌ (конструктор копирования / пСрСмСщСния, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ копирования / пСрСмСщСния ΠΈΠ»ΠΈ дСструктор), эта функция удаляСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² объСдинСнии ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° программист.

Если объСдинСниС содСрТит нСстатичСский Ρ‡Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ… с Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ конструктором ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, конструктор объСдинСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ удаляСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ объСдинСния Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° элСмСнта ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

НС Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° элСмСнта ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ элСмСнта ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’ вашСм случаС это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ конструктор ΠΈ дСструктор. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ свой ΠΊΠΎΠ΄ Π½Π°:

typedef struct
{
    enum v{a,b,c} v;
    union w{
        int a;
        bool b;
        std::string c;
        w() {}       // Explicit constructor definition
        ~w() { };    // Explicit destructor definition
} w;

} Data_Set2;

Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° std::any ΠΈ std::variant. ПослСдний обСспСчиваСт типобСзопасныС ΡΠΎΡŽΠ·Ρ‹ ΠΈ, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π² вашСм случаС. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ваш компилятор (ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, MSVC) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ C ++ 17.

Π Π•Π”ΠΠšΠ’Π˜Π ΠžΠ’ΠΠ’Π¬: Как ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» eerorika, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ участника. Бсылка, указанная Π² Π½Π°Ρ‡Π°Π»Π΅, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объСдинСния строк ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ для Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ повСдСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ просто Π½Π΅ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π·Π° кулисами ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚ΠΈΠΏΡ‹ POD, я Π±Ρ‹ посовСтовал Π²Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с std::variant.

3

andreee
17 Π”Π΅ΠΊ 2019 Π² 09:38

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ опрСдСляСтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-Ρ‡Π»Π΅Π½, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ конструируСмой ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ опрСдСляСтС Ρ‡Π»Π΅Π½ Ρ‚ΠΈΠΏ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выдаст Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ для опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ этого Ρ‚ΠΈΠΏΠ°.

Π§Ρ‚ΠΎ касаСтся ошибки, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² объСдинСнии, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

union w{
    int a;
    bool b;
    std::string c;

    // Default constructor initialize the string member
    w() : c()
    {}
}w;

2

Some programmer dude
5 Π€Π΅Π² 2019 Π² 13:14

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ объСдинСниС w Π½Π΅ являСтся Π½ΠΈ конструируСмым ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΈ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅ΠΌΡ‹ΠΌ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ дСструктор Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ нСявно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‡Π»Π΅Π½ c Π½Π΅ являСтся Π½ΠΈ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ, Π½ΠΈ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅ΠΌΡ‹ΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‡Π»Π΅Π½Π° Ρ‚ΠΈΠΏΠ° w просто Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ удаляСтС участника, поэтому ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅Ρ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ w конструируСмым ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

union w{
    int a;
    bool b;
    std::string c;

    w() // Could activate one of the members if so desired
    {}

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ w Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅ΠΌΡ‹ΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ дСструктор (Π½ΠΎ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°):

    ~w(){
        //TODO destruct the active member
    }
} w;

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π°:

  • НСвозмоТно Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ участник Π°ΠΊΡ‚ΠΈΠ²Π΅Π½.
  • Доступ ΠΊ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ Ρ‡Π»Π΅Π½Ρƒ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
  • Если c Π°ΠΊΡ‚ΠΈΠ²Π΅Π½, Π½Π΅ уничтоТая Π΅Π³ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ w Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ участникС c. Π’Π°ΠΊΠΎΠΉ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² дСструкторС Data_Set2, прСдполагая, Ρ‡Ρ‚ΠΎ v ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ элСмСнт являСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ; эти Ρ‡Π»Π΅Π½Ρ‹, вСроятно, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ).

3

eerorika
6 Π€Π΅Π² 2019 Π² 14:23

C# NET: Class vs Struct ΠΈΠ»ΠΈ Π² Ρ‡Ρ‘ΠΌ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Классом ΠΈ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΎΠΉ



ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΎ NET |

created:
7/10/2011
|
published:
7/10/2011
|
updated:
11/10/2021
|
view count:
89406

| comments:
30

МнС Π² послСднСС врСмя ΠΎΡ‡Π΅Π½ΡŒ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ программисты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ β€œΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉβ€ ΠΆΠΈΠ·Π½ΠΈ структуры (struct), Π½ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΎΠ± этом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. И Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, для простоты своСй «ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ» ΠΆΠΈΠ·Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ всСгда классы (class). Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π°Π· ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° различиях ΠΌΠ΅ΠΆΠ΄Ρƒ структурами ΠΈ классами.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ struсture?

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ синтаксичСски ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° классы, Π½ΠΎ сущСствуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ класс – являСтся ссылочным Ρ‚ΠΈΠΏΠΎΠΌ (reference type), Π° структуры – Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ класс (value type). А ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, классы всСгда ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π², Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ, β€œΠΊΡƒΡ‡Π΅β€ (heap), Π° структуры ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² стСкС (stack). Π¦ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· коммСнтария: «Π˜ΠΌΡ…ΠΎ, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ структур ΠΈ классов: структуры ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ), ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов — ΠΏΠΎ ссылкС. ИмСнно это являСтся ΡΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½Π΅ΠΉΡˆΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π² ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ, Π° Π½Π΅ Ρ‚ΠΎ, Π³Π΄Π΅ ΠΎΠ½ΠΈ хранятся. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: структуру Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠΎ ссылкС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ out ΠΈ ref.»

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡΡ‚Π°Ρ‚ΡŒΠΈ:Β  Π§Π΅ΠΌ большС Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуры вмСсто Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… (Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ – ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…) классов, Ρ‚Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΏΠΎ рСсурсам Π±ΡƒΠ΄Π΅Ρ‚ использованиС памяти. БмСю ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ трСбуСтся объяснСния почСму… β€œΠΊΡƒΡ‡Π°β€, β€œΡΠ±ΠΎΡ€Ρ‰ΠΈΠΊ мусора”, β€œΠ½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ прохода”, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ β€œΡ€ΡƒΡ‡Π½ΠΎΠ³ΠΎβ€ управлСния ΠΊΡƒΡ‡Π΅ΠΉ ΠΈ сборщиком мусора. ВсС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΡƒΠΆΠ΅ пСрСчислСны.

Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ классы, структуры ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ поля, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ конструкторы. Π₯отя ΠΏΡ€ΠΎ конструкторы Π½Π°Π΄ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ (Π±ΡƒΠ΄Π΅Ρ‚ дальшС ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅), ΠΈΠ±ΠΎ это Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅ понятиС ΠΏΡ€ΠΈ сравнивании классов ΠΈ структур.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ всСгда с ВамиНС хочСтся Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ информация, для Вас ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠΌ. Π’ языкС C# ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ числовыС Ρ‚ΠΈΠΏΡ‹ int, long, float ΡΠ²Π»ΡΡŽΡ‚ΡΡ альясами для структур System.Int32, System.Int64 ΠΈ System.Single соотвСтствСнно. Π­Ρ‚ΠΈ структуры ΠΈΠΌΠ΅ΡŽΡ‚ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, каТдая ΠΈΠ· пСрСчислСнных структур ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ToString. Π’Π°ΠΊΠΆΠ΅ Ρƒ пСрСчислСнных структур Π΅ΡΡ‚ΡŒ статичныС поля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Int32.MaxValue ΠΈΠ»ΠΈ Int32.MinValue. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π’Ρ‹ ΡƒΠΆΠ΅ Π² повсСднСвной «ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ» ΠΆΠΈΠ·Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ структуры, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π½ΠΈΠΌΠΈ.

Π’Π°Π±Π»ΠΈΡ†Π° классов ΠΈ структур Π² Microsoft. NET Framework

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π°Π»ΡŒΡΡΡ‹ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ Ρ‚ΠΈΠΏΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π½Π° информация ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Ρ‚ΠΈΠΏΠ΅ (структура ΠΈΠ»ΠΈ класс).
















KeywordType equivalent Class or structure
boolSystem.BooleanStructure
byteSystem.ByteStructure
decimalSystem.DecimalStructure
doubleSystem.DoubleStructure
floatSystem.SingleStructure
intSystem.Int32Structure
longSystem.Int64Structure
objectSystem.ObjectClass
sbyteSystem.SByteStructure
shortSystem.Int16Structure
stringSystem.StringClass
uintSystem.UInt32Structure
ulongSystem.UInt64Structure
ushortSystem.UInt16Structure

ОбъявлСниС структур

Для объявлСния структуры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ слово struct, слСдом Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ структуры ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки:


struct Time
{
   public int hours, minites, seconds;
}

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ классов, использованиС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π² структурах Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π΅ рСкомСндуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ сущСствуСт способа контролирования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Π½ΠΈΡ…. НапримСр, ΠΊΡ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ установит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΡƒΡ‚ ΠΈΠ»ΠΈ сСкунд Π±ΠΎΠ»Π΅Π΅ 60. Π‘ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойства, Π° Π² конструкторС ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ:


  struct Time
  {
      public Time(int hh, int mm, int ss)
      {
          hours = hh % 24;
          minutes = mm % 60;
          seconds = ss % 60;
      }

      public int Hours()
      {
          return hours;
      }
      ...
      private int hours, minutes, seconds;
  }

ΠšΡΡ‚Π°Ρ‚ΠΈ, β€¦ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² Π’Π°ΡˆΠΈΡ… структурах. НапримСр, Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния (==) ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Π΅ Π΅ΠΌΡƒ (!=) Π½Π° своих структурах. Однако, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ явно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для своих структур.

И Π² Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ структурами ΠΈ классами

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΆΠ΅ Π·Π°Π»ΠΎΠΆΠ΅Π½Π° ошибка:


struct Time
{
 public Time() { ... } // compile-time error
 ...
}

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибки Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) для структуры, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ компилятор всСгда Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ сам. Π§Ρ‚ΠΎ ΠΆΠ΅ касаСтся класса, Ρ‚ΠΎ компилятор создаСт конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π’Ρ‹ Π΅Π³ΠΎ Π½Π΅ создали. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ конструктор для структуры всСгда устанавливаСт поля Π² 0, false ΠΈΠ»ΠΈ null – ΠΊΠ°ΠΊ ΠΈ для классов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ созданная структура всСгда Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя β€œΠ°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎβ€ Π² соотвСтствии со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ…. Если Π’Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поля своими значСниями Π² конструкторС с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Однако, Ссли Π² этом конструкторС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, компилятор Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° Вас ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.


struct Time
{
  private int hours, minutes, seconds;
  ...
  public Time(int hh, int mm)
  {
      this.hours = hh;
      this.minutes = mm;
  }   // compile-time error: seconds not initialized
}

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹: ВсСгда всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹!

Π’ классах Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ  Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ нСпосрСдствСнно Π² мСстС ΠΈΡ… объявлСния. Π’ структурах Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ получится, ΠΈ поэтому Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ компиляции:


struct Time
{
   private int hours = 0; // compile-time error
   private int minutes;
   private int seconds;
   ...
}

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹: НСльзя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² мСстС ΠΈΡ… объявлСния!

Данная Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ΄Π΅ ΠΏΠΎΠ΄Ρ‹Ρ‚ΠΎΠΆΠΈΠ²Π°Π΅Ρ‚ всё Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ основныС отличия ΠΌΠ΅ΠΆΠ΄Ρƒ классами ΠΈ структурами.








Π’ΠΎΠΏΡ€ΠΎΡΠ‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°ΠšΠ»Π°ΡΡ
И ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°?Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ (value) Ρ‚ΠΈΠΏΠšΠ»Π°ΡΡ ссылочный (reference) Ρ‚ΠΈΠΏ
А Π³Π΄Π΅ β€œΠΆΠΈΠ²ΡƒΡ‚β€ экзСмпляры этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²?ЭкзСмпляры структуры Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ значСниями ΠΈ β€œΠΆΠΈΠ²ΡƒΡ‚β€ ΠΎΠ½ΠΈ Π² стСкС (stack).ЭкзСмпляры классов Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ β€œΠΆΠΈΠ²ΡƒΡ‚β€ ΠΎΠ½ΠΈ Π² ΠΊΡƒΡ‡Π΅ (heap).
МоТно Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?НСтДа
Если создаСтся свой конструктор Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?ДаНСт
Если Π² своём конструкторС Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поля, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ автоматичСски ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ компилятором?НСтДа
Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² мСстС ΠΈΡ… объявлСния?НСтДа

ИспользованиС структур ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π’Ρ‹ создали структуры, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ классы ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹. НапримСр, создав структуру Time, я ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² классС:


struct Time
{
    private int hours, minutes, seconds;
    ...
}

class Example
{
    private Time currentTime;

    public void Method(Time parameter)
    {
        Time localVariable;
        ...
    }
}

ΠšΡΡ‚Π°Ρ‚ΠΈ, …

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ nullable Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° структуры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ β€œ?” ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null:

Time? currentTime = null;

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ структур

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π½Π΅ Ρ€Π°Π· Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ поля структуры ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ использования конструктора, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ β€œΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΠ³ΠΎβ€ ΠΈΠ»ΠΈ β€œΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽβ€. К особСнностям структур ΠΌΠΎΠΆΠ½ΠΎ отнСсти Π΅Ρ‰Π΅ ΠΈ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ вслСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ структуры ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ структуру Π±Π΅Π· использования конструктора, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


Time now;

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, пСрСмСнная создаСтся, Π½ΠΎ поля Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² соотвСтствии ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ конструктора.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ структуры, это ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ‚ΠΎΠ½Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C# ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ±ΡƒΠ΄Π΅Ρ‚ с Π’Π°ΠΌΠΈ сила… структур. Π¦ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· коммСнтария: «Π‘ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ согласСн. МногиС маститыС Π·Π°ΠΏΠ°Π΄Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуры, прСдпочитая классы. Π₯отя, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠ»ΠΈΡ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ… ΠΈ ΠΈΡ… ΠΌΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ стоит, Π»ΡƒΡ‡ΡˆΠ΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ своСй Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ.»

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ классы — SwiftBook

ΠšΠ»Π°ΡΡΡ‹ ΠΈ структуры ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ конструкциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ станут ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ для ΠΊΠΎΠ΄Π° вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для добавлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² классах ΠΈ структурах ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² Ρ‚ΠΎΡ‚ ΠΆΠ΅ синтаксис, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ объявлСнии констант, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования, Swift Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ для интСрфСйсов ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов ΠΈ структур. Π’ Swift, Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ структуру ΠΈΠ»ΠΈ класс Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΈ внСшний интСрфСйс автоматичСски становится доступным для использования Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

ЭкзСмпляр класса Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, классы ΠΈ структуры Π² Swift Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±Π»ΠΈΠΆΠ΅ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‡Π΅ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π² этой Π³Π»Π°Π²Π΅ описываСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ экзСмплярам ΠΈ класса, ΠΈ структуры. Π’ связи с этим, употрСбляСтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ — экзСмпляр.

ΠšΠ»Π°ΡΡΡ‹ ΠΈ структуры Π² Swift ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ. И Π² классах ΠΈ Π² структурах ΠΌΠΎΠΆΠ½ΠΎ:

  • ΠžΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ свойства для хранСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
  • ΠžΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
  • ΠžΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ индСксы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΈΡ… значСниям, Ρ‡Π΅Ρ€Π΅Π· синтаксис индСксов
  • ΠžΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС
  • Они ΠΎΠ±Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ стандартной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
  • Они ΠΎΠ±Π° ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ, для обСспСчСния стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ смотритС Π³Π»Π°Π²Ρ‹ Бвойства, ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π˜Π½Π΄Π΅ΠΊΡΡ‹, Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ, Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹.

ΠšΠ»Π°ΡΡΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Ρƒ структур:

  • НаслСдованиС позволяСт ΠΎΠ΄Π½ΠΎΠΌΡƒ классу Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ характСристики Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ
  • ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² позволяСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ экзСмпляра класса Π² процСссС выполнСния
  • Π”Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ экзСмпляру класса ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ использовал
  • ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ссылок допускаСт Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½Ρƒ ссылку Π½Π° экзСмпляр класса. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ смотритС НаслСдованиС, ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ², Π”Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ АвтоматичСский подсчСт ссылок.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ классов связаны с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ слоТности. Π›ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуры ΠΈ пСрСчислСния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΡ… Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎ классы. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ — Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ — это структуры ΠΈ пСрСчислСния.

Бинтаксис объявлСния

ΠšΠ»Π°ΡΡΡ‹ ΠΈ структуры ΠΈΠΌΠ΅ΡŽΡ‚ схоТий синтаксис объявлСния. Для объявлСния классов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class, Π° для структур — ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово struct. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ всС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΏΠ°Ρ€Ρ‹ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок:

class SomeClass {
    // здСсь ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса
}
struct SomeStructure {
    // здСсь ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ структуры
}
Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Π§Ρ‚ΠΎ Π±Ρ‹ Π²Ρ‹ Π½Π΅ создавали, Π½ΠΎΠ²Ρ‹ΠΉ класс ΠΈΠ»ΠΈ структуру, Π²Ρ‹ фактичСски создаСтС Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π² Swift. НазначайтС ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ UpperCamelCase(SomeClass ΠΈΠ»ΠΈ SomeStructure), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ стандартам написания ΠΈΠΌΠ΅Π½ Ρ‚ΠΈΠΏΠΎΠ² Π² Swift (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, String, Int ΠΈ Bool). Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, всСгда Π½Π°Π·Π½Π°Ρ‡Π°ΠΉΡ‚Π΅ свойствам ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈΠΌΠ΅Π½Π° Π² lowerCamelCase (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, frameRate ΠΈ incrementCount), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΡ‚ ΠΈΠΌΠ΅Π½ Ρ‚ΠΈΠΏΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния структуры ΠΈ класса:

struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ структуру Resolution для описания Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° Π² пиксСлях. Π­Ρ‚Π° структура ΠΈΠΌΠ΅Π΅Ρ‚Β Π΄Π²Π° свойства width, height. Π₯Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ свойства — ΠΈΠ»ΠΈ константы, ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сгруппированы ΠΈ сохранСны Π² Ρ€Π°ΠΌΠΊΠ°Ρ… класса ΠΈΠ»ΠΈ структуры. Π­Ρ‚ΠΈΠΌ свойствам Π²Ρ‹Π²Π΅Π΄Π΅Π½ Ρ‚ΠΈΠΏ Int, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΠΌ присвоили цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ объявили ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ класс VideoMode, для описания Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠ° для отобраТСния Π½Π° видСодисплСС. Π£ класса Π΅ΡΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ свойства Π² Π²ΠΈΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ — resolution, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ экзСмпляра структуры Resolution, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΈΠΏ свойства ΠΊΠ°ΠΊ Resolution. Для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π΅Ρ… свойств Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ с interlaced = false, frameRate = 0.0 ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° String с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ name. Π­Ρ‚ΠΎ свойство name автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nil ΠΈΠ»ΠΈ «Π½Π΅Ρ‚ значСния для name», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.

ЭкзСмпляры класса ΠΈ структуры

ОбъявлСниС структуры Resolution ΠΈ класса VideoMode Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ Resolution ΠΈ VideoMode Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ. Π‘Π°ΠΌΠΈ ΠΏΠΎ сСбС ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ спСцифичСскоС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр структуры ΠΈΠ»ΠΈ класса.

Бинтаксис для образования экзСмпляра класса ΠΈΠ»ΠΈ структуры ΠΎΡ‡Π΅Π½ΡŒ схоТ:

let someResolution = Resolution()
let someVideoMode = VideoMode()

И классы ΠΈ структуры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ синтаксис ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° для образования Π½ΠΎΠ²Ρ‹Ρ… экзСмпляров. Бамая простая Ρ„ΠΎΡ€ΠΌΠ° синтаксиса ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° — использованиС ΠΈΠΌΠ΅Π½ΠΈ Ρ‚ΠΈΠΏΠ° ΠΈ пустыС ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки сразу послС Π½Π΅Π³ΠΎ Resolution(), VideoMode(). Π­Ρ‚ΠΎ создаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса ΠΈΠ»ΠΈ структуры с Π»ΡŽΠ±Ρ‹ΠΌΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ свойствами с ΠΈΡ… значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ классов ΠΈ структур описана Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² Π³Π»Π°Π²Π΅ Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ.

Доступ ΠΊ свойствам

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ свойствам экзСмпляра, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹ΠΉ синтаксис. Π’ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠΌ синтаксисС имя свойства ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ сразу послС ΠΈΠΌΠ΅Π½ΠΈ экзСмпляра, Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ вписываСтся Ρ‚ΠΎΡ‡ΠΊΠ° (.) Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ²:

print("The width of someResolution is \(someResolution.width)")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The width of someResolution is 0"

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ someResolution.width ссылаСтся Π½Π° свойство width экзСмпляра someResolution, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 0.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² подсвойства, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, свойство width свойства resolution класса VideoMode:

print("The width of someVideoMode is \(someVideoMode.resolution.width)")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The width of someVideoMode is 0"

Π’Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹ΠΉ синтаксис для присваивания Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния свойству:

someVideoMode.resolution.width = 1280
print("The width of someVideoMode is now \(someVideoMode.resolution.width)")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The width of someVideoMode is now 1280"

ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ структурных Ρ‚ΠΈΠΏΠΎΠ²

ВсС структуры ΠΈΠΌΠ΅ΡŽΡ‚ автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ «ΠΏΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ свойств Π½ΠΎΠ²Ρ‹Ρ… экзСмпляров структуры. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния для свойств Π½ΠΎΠ²ΠΎΠ³ΠΎ экзСмпляра ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ поэлСмСнтному ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ:

let vga = Resolution(width: 640, height: 480)

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ структур, классы Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ поэлСмСнтного ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° исходных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаны Π² Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ.

Π’ΠΈΠΏ значСния — это Ρ‚ΠΈΠΏ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ копируСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ присваиваСтся константС ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° пСрСдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ΠΎΠΎΠ±Ρ‰Π΅ Π²Ρ‹ ΡƒΠΆΠ΅ достаточно Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ использовали Ρ‚ΠΈΠΏΡ‹ Π½Π° протяТСнии ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π³Π»Π°Π². Но Ρ„Π°ΠΊΡ‚ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Swift — Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΎΠ½ΠΈ ΠΊΠ°ΠΊ структуры.

ВсС структуры ΠΈ пСрСчислСния — Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Swift. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ любой экзСмпляр структуры ΠΈ пСрСчислСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ создаСтС, ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π² качСствС свойств, всСгда ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ пСрСдаСтся ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ массивы, словари ΠΈ строки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ для сниТСния Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ копию, эти ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ элСмСнты хранятся ΠΌΠ΅ΠΆΠ΄Ρƒ исходным экзСмпляром ΠΈ Π»ΡŽΠ±Ρ‹ΠΌΠΈ копиями. Если ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΠΏΠΈΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π°, элСмСнты ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ структуру Resolution ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

let hd = Resolution(width: 1920, height: 1080)
var cinema = hd

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ константу hd ΠΈ присваиваСт экзСмпляр Resolution, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ двумя значСниями width ΠΈ height.

Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, объявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ cinema ΠΈ присваиваСм Π΅ΠΉ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ hd. Π’Π°ΠΊ ΠΊΠ°ΠΊ Resolution — структура, дСлаСтся копия ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ экзСмпляра, ΠΈ эта новая копия присваиваСтся cinema. Π”Π°ΠΆΠ΅ Π½Π΅ смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ hd ΠΈ cinema ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ height, width, ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ экзСмплярами.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства width Ρƒ cinema, ΠΌΡ‹ сдСлаСм Π΅Π³ΠΎ Ρ‡ΡƒΡ‚ΡŒ большС 2 тысяч, Ρ‡Ρ‚ΠΎ являСтся стандартным для Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΊΠΈΠ½ΠΎΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ (2048 пиксСлСй ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π½Π° 1080 пиксСлСй высоты):

cinema.width = 2048

Если ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ свойство width Ρƒ cinema, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ измСнилось Π½Π° 2048:

print("cinema is now \(cinema.width) pixels wide")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "cinema is now 2048 pixels wide"

Однако свойство width исходного hd экзСмпляра ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ 1920:

print("hd is still \(hd.width) pixels wide")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "hd is still 1920 pixels wide"

Когда ΠΌΡ‹ присвоили cinema Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ hd, Ρ‚ΠΎ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡΡŒ Π² hd Π±Ρ‹Π»ΠΈ скопированы Π² Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр cinema. И Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π²Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… экзСмпляра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ числовыС значСния. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ экзСмплярами, Ρ‚ΠΎ установив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства width Ρƒ cinema Π½Π° 2048 Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ повлияСт Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ width Ρƒ hd, это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π’ΠΎ ΠΆΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ пСрСчислСниям:

enum CompassPoint {
    case north, south, east, west
    mutating func turnNorth() {
        self = .north
    }
}
var currentDirection = CompassPoint.west
let rememberedDirection = currentDirection
currentDirection.turnNorth()

print("Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ - \(currentDirection)")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ - north"

Когда ΠΌΡ‹ присваиваСм rememberedDirection Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ currentDirection, ΠΌΡ‹ фактичСски ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ИзмСняя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ currentDirection, ΠΌΡ‹ Π½Π΅ мСняСм копию исходного значСния, хранящСйся Π² rememberedDirection.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ссылочный Ρ‚ΠΈΠΏ Π½Π΅ копируСтся, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ константС, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ВмСсто копирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ссылка Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ экзСмпляр.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с использованиСм класса VideoMode, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» объявлСн Π²Ρ‹ΡˆΠ΅:

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ объявляСм Π½ΠΎΠ²ΡƒΡŽ константу tenEighty ΠΈ устанавливаСм ссылку Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса VideoMode. ЗначСния Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠ° Π±Ρ‹Π»ΠΈ присвоСны ΠΊΠΎΠΏΠΈΠ΅ΠΉ со значСниями 1920 Π½Π° 1080. ΠœΡ‹ ставим tenEighty.interlaced = true ΠΈ Π΄Π°Π΅ΠΌ имя β€œ1080i”. Π—Π°Ρ‚Π΅ΠΌ устанавливаСм частоту ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² сСкунду 25 .

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлаСм, это tenEighty присвоим Π½ΠΎΠ²ΠΎΠΉ константС alsoTenEighty ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ частоту ΠΊΠ°Π΄Ρ€ΠΎΠ²:

let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

Π’Π°ΠΊ ΠΊΠ°ΠΊ это классы ссылочного Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ экзСмпляры tenEighty ΠΈ alsoTenEighty ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр VideoMode. ЀактичСски получаСтся, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΈ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ СдинствСнного экзСмпляра, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС Π½ΠΈΠΆΠ΅:

Если ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ свойство frameRate Ρƒ tenEighty, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ новая частота ΠΊΠ°Π΄Ρ€ΠΎΠ² 30.0, которая бСрСтся Ρƒ экзСмпляра VideoMode:

print("The frameRate property of tenEighty is now \(tenEighty.frameRate)")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The frameRate property of tenEighty is now 30.0"

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ слоТно Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Если tenEighty ΠΈ alsoTenEighty Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π±Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΠ³ΠΎΠ»ΠΊΠ°Ρ… вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ слоТно Π½Π°ΠΉΡ‚ΠΈ всС мСста, Π³Π΄Π΅ ΠΌΡ‹ мСняСм Ρ€Π΅ΠΆΠΈΠΌ воспроизвСдСния Π²ΠΈΠ΄Π΅ΠΎ. Π“Π΄Π΅ Π±Ρ‹ Π²Ρ‹ Π½Π΅ использовали tenEighty, Π²Π°ΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅ Π±Ρ‹ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎ alsoTenEighty, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ссылочного Ρ‚ΠΈΠΏΠ°, с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ значСния Π΄Π΅Π»Π° обстоят Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ вСсь ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ взаимодСйствуСт с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, находится рядом, Π² вашСм исходном Ρ„Π°ΠΉΠ»Π΅.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ tenEighty ΠΈ alsoTenEighty ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ константы, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Однако Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ tenEighty.frameRate ΠΈ alsoTenEighty.frameRate, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ значСния tenEighty ΠΈ alsoTenEighty сами ΠΏΠΎ сСбС Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π΅ «содСрТат» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ экзСмпляра VideoMode, Π° Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΎΠ½ΠΈ лишь ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π½Π΅Π³ΠΎ. Π­Ρ‚ΠΎ свойство frameRate Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π² основС VideoMode, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ мСняСтся, Π° Π½Π΅ значСния константы ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅ΠΉΡΡ Π½Π° VideoMode.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ тоТдСствСнности

Π’Π°ΠΊ ΠΊΠ°ΠΊ классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ нСсколько констант ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΡΡΡ‹Π»Π°Π»ΠΈΡΡŒ Π½Π° ΠΎΠ΄ΠΈΠ½ СдинствСнный экзСмпляр класса. (Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ структурам ΠΈ пСрСчислСниям, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ константам ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ функциям.)

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π»ΠΈ Π΄Π²Π΅ константы ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр класса. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ этого Π² Swift Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° тоТдСствСнности:

  • Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ (===)
  • НС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ ( !== )

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π»ΠΈ Π΄Π²Π΅ константы ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр:

if tenEighty === alsoTenEighty {
    print("tenEighty and alsoTenEighty refer to the same VideoMode instance.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "tenEighty and alsoTenEighty refer to the same VideoMode instance."

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Β«ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΒ» (Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€Π΅Ρ… Π·Π½Π°ΠΊΠΎΠ² равСнства, ΠΈΠ»ΠΈ ===) Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π² Π²ΠΈΠ΄Ρƒ «равСнство» (Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡƒΡ… Π·Π½Π°ΠΊΠΎΠ² равСнства, ΠΈΠ»ΠΈ ==). Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ‚ΠΎΠΆΠ΄Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π²Π΅ константы ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр класса. РавСнство Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ экзСмпляры Ρ€Π°Π²Π½Ρ‹ ΠΈΠ»ΠΈ эквивалСнтны Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π² самом ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ Β«Ρ€Π°Π²Π½Ρ‹Β».

Когда Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ свой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс ΠΈΠ»ΠΈ структуру, Π²Ρ‹ сами Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ» Π΄Π²ΡƒΡ… экзСмпляров. ΠŸΡ€ΠΎΡ†Π΅ΡΡ опрСдСлСния своСй собствСнной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² «Ρ€Π°Π²Π΅Π½ΡΡ‚Π²Π°» ΠΈΠ»ΠΈ «Π½Π΅Ρ€Π°Π²Π΅Π½ΡΡ‚Π²Π°» описан Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ эквивалСнтности.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² C, C++ ΠΈΠ»ΠΈ Objective-C, Ρ‚ΠΎ Π²Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ эти языки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ для ссылки Π½Π° адрСс памяти. Π’ Swift константы ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° экзСмпляр ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ссылочного Ρ‚ΠΈΠΏΠ°, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ указатСлям C, но это Π½Π΅ прямыС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° адрСс памяти, ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΡ‚ вас написания Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΈ(*) для ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ создаСтС ссылку. ВмСсто этого Ρ‚Π°ΠΊΠΈΠ΅ ссылки ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ константы ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Swift. Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляСт Ρ‚ΠΈΠΏΡ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π±ΡƒΡ„Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с указатСлями — см. Β«Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽΒ».

Если Π²Ρ‹ нашли ΠΎΡˆΠΈΠ±ΠΊΡƒ, поТалуйста, Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ тСкста ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctrl+Enter.

C структура Π² структурС — Вэб-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚Π΅Π»Π΅ΠΉ!

Как Π²Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ извСстно, классы относятся ΠΊ ссылочным Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ класса доступны ΠΏΠΎ ссылкС, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ простых Ρ‚ΠΈΠΏΠΎΠ², доступных нСпосрСдствСнно. Но ΠΈΠ½ΠΎΠ³Π΄Π° прямой доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΊΠ°ΠΊ ΠΊ значСниям простых Ρ‚ΠΈΠΏΠΎΠ² оказываСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π΄ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π΅Π΄ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ (Π΄Π°ΠΆΠ΅ самым ΠΌΠ΅Π»ΠΊΠΈΠΌ) ΠΏΠΎ ссылкС связан с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ Π½Π° расход Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти.

Для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΈΠΉ Π² C# прСдусмотрСна структура, которая ΠΏΠΎΠ΄ΠΎΠ±Π½Π° классу, Π½ΠΎ относится ΠΊ Ρ‚ΠΈΠΏΡƒ значСния, Π° Π½Π΅ ΠΊ ссылочному Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’.Π΅. структуры ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ классов Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² памяти ΠΈ ΠΊΠ°ΠΊ ΠΊ Π½ΠΈΠΌ осущСствляСтся доступ (классы β€” это ссылочныС Ρ‚ΠΈΠΏΡ‹, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π² ΠΊΡƒΡ‡Π΅, структуры β€” Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π² стСкС), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ свойствами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, структуры Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ наслСдованиС). Из сообраТСний ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуры для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Однако Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ синтаксиса структуры ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° классы.

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΡ… объявлСнии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово struct вмСсто class. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° общая Ρ„ΠΎΡ€ΠΌΠ° объявлСния структуры:

Π³Π΄Π΅ имя ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ имя структуры.

Как ΠΈ Ρƒ классов, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ структуры ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ свои Ρ‡Π»Π΅Π½Ρ‹: ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, поля, индСксаторы, свойства, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ события. Π’ структурах допускаСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ конструкторы, Π½ΠΎ Π½Π΅ дСструкторы. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя для структуры нСльзя ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ конструктор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Ρ‚.Π΅. конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²). Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ конструктор, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, опрСдСляСтся для всСх структур автоматичСски ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ измСнСнию. Π’Π°ΠΊΠΎΠΉ конструктор ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ поля структуры значСниями, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. А ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ структуры Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ наслСдованиС, Ρ‚ΠΎ ΠΈΡ… Ρ‡Π»Π΅Π½Ρ‹ нСльзя ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ abstract, virtual ΠΈΠ»ΠΈ protected.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ структуры ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, Π½ΠΎ Π² этом Π½Π΅Ρ‚ особой нСобходимости. Π’Π΅Π΄ΡŒ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new, Ρ‚ΠΎ вызываСтся конструктор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. А ΠΊΠΎΠ³Π΄Π° этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ создаСтся, хотя ΠΈ Π½Π΅ инициализируСтся. Π’ этом случаС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π»ΡŽΠ±Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² структуры придСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования структур:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° структура присваиваСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ, создаСтся копия Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ этом Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ структуры ΠΎΡ‚ класса. Когда ссылка Π½Π° ΠΎΠ΄ΠΈΠ½ класс присваиваСтся ссылкС Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс, Π² ΠΈΡ‚ΠΎΠ³Π΅ ссылка Π² Π»Π΅Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΈ ссылка Π² ΠΏΡ€Π°Π²ΠΎΠΉ Π΅Π³ΠΎ части. А ΠΊΠΎΠ³Π΄Π° пСрСмСнная ΠΎΠ΄Π½ΠΎΠΉ структуры присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ структуры, создаСтся копия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° структуры ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π±Ρ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использовался класс UserInfo вмСсто структуры, получился Π±Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

НазначСниС структур

Π’ связи с ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ€Π΅Π·ΠΎΠ½Π½Ρ‹ΠΉ вопрос: Π·Π°Ρ‡Π΅ΠΌ Π² C# Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° структура, Ссли ΠΎΠ½Π° ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ скромными возмоТностями, Ρ‡Π΅ΠΌ класс? ΠžΡ‚Π²Π΅Ρ‚ Π½Π° этот вопрос Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ эффСктивности ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ относятся ΠΊ Ρ‚ΠΈΠΏΠ°ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈ поэтому ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСпосрСдствСнно, Π° Π½Π΅ ΠΏΠΎ ссылкС. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со структурой Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ трСбуСтся пСрСмСнная ссылочного Ρ‚ΠΈΠΏΠ°, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π² рядС случаСв ΡΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ экономию ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π° со структурой Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΡ…ΡƒΠ΄ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΡΡ‚ΠΎΠ»ΡŒ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠΌΡƒ для обращСния ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса. Π’Π΅Π΄ΡŒ доступ ΠΊ структурС осущСствляСтся нСпосрСдствСнно, Π° ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ β€” ΠΏΠΎ ссылкС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ классы относятся ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ссылочного Ρ‚ΠΈΠΏΠ°. ΠšΠΎΡΠ²Π΅Π½Π½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΠΎΠΉ доступ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ структурам Π½Π΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ. И Π²ΠΎΠΎΠ±Ρ‰Π΅, Ссли Π½ΡƒΠΆΠ½ΠΎ просто ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ связанных вмСстС Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… наслСдования ΠΈ обращСния ΠΏΠΎ ссылкС, Ρ‚ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ структуру.

Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π‘++ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ структуры ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово struct. Но эти структуры ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² C#. Π’Π°ΠΊ, Π² Π‘++ структура относится ΠΊ Ρ‚ΠΈΠΏΡƒ класса, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, структура ΠΈ класс Π² этом языкС практичСски Ρ€Π°Π²Π½ΠΎΡ†Π΅Π½Π½Ρ‹ ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° лишь доступом ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊ ΠΈΡ… Ρ‡Π»Π΅Π½Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ для класса ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ для структуры. А Π² C# структура относится ΠΊ Ρ‚ΠΈΠΏΡƒ значСния, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ класс β€” ΠΊ ссылочному Ρ‚ΠΈΠΏΡƒ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠœΠΈΡ€ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами. Π‘Π°ΠΌΡ‹ΠΌ СстСствСнным ΠΈΠ· Π½ΠΈΡ… являСтся прСдставлСниС ΠΎ Π½Ρ‘ΠΌ, ΠΊΠ°ΠΊ ΠΎ Π½Π°Π±ΠΎΡ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ свои свойства. НапримСр, для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° это возраст, ΠΏΠΎΠ», рост, вСс ΠΈ Ρ‚.Π΄. Для вСлосипСда – Ρ‚ΠΈΠΏ, Ρ€Π°Π·ΠΌΠ΅Ρ€ колёс, вСс, ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒ ΠΈ ΠΏΡ€. Для Ρ‚ΠΎΠ²Π°Ρ€Π° Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅ – ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€, Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π³Ρ€ΡƒΠΏΠΏΠ°, вСс, Ρ†Π΅Π½Π°, скидка ΠΈ Ρ‚.Π΄.

Π£ классов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π°Π±ΠΎΡ€ этих свойств ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ: всС собаки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ описаны, с Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ свойств, Π½ΠΎ значСния этих свойств Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅.

ВсС самолёты ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΎΠ±Ρ‰ΠΈΡ… свойств Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Если ΠΆΠ΅ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ описаниС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ подклассы: самолёт Π°ΠΌΡ„ΠΈΠ±ΠΈΠΈ, Π±ΠΎΠ΅Π²Ρ‹Π΅ истрСбитСли, пассаТирскиС Π»Π°ΠΉΠ½Π΅Ρ€Ρ‹ – ΠΈ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΡƒΠΆΠ΅ этих классов ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. НапримСр, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сотрудниках ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ сотрудник, Π² ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ большим количСством Ρ€Π°Π·Π½Ρ‹Ρ… свойств. ΠœΡ‹ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ: ΠΏΠΎΠ», имя, фамилия, возраст, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° конструкция, которая Π±Ρ‹ ΠΌΠΎΠ³Π»Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Для этих Ρ†Π΅Π»Π΅ΠΉ Π² си ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ структуры.

ОбъявлСниС структуры

Бинтаксис объявлСния структуры

Полями структуры ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΡ€ΠΎΠΌΠ΅ самой структуры этого ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру этого Ρ‚ΠΈΠΏΠ°:

Π’ Ρ‚ΠΎΠΌ случаС, Ссли нСсколько ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ, Ρ‚ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ:

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ объявили структуру, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с использованиСм слуТСбного слова struct. Доступ Π΄ΠΎ ΠΏΠΎΠ»Π΅ΠΉ структуры осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, объявлСнная Π² глобальном контСкстС, Π²ΠΈΠ΄Π½Π° всСм. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСна Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

МоТно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: синтаксис языка позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры структуры сразу ΠΆΠ΅ послС опрСдСлСния:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ. Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π΅ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя структуры Π² дальнСйшСм.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создали ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ A. Она являСтся структурой с двумя полями.

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ инициализация структур

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ врСмя создания ΠΊΠ°ΠΊ массив. Поля Π² этом случаС Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ порядку.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½ΠΈΡ†Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ структуру. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСй структурС Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ нСльзя.

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ стандарт си позволяСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поля структуры ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтакис:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°

Когда ΠΌΡ‹ опрСдСляСм Π½ΠΎΠ²ΡƒΡŽ структуру с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слуТСбного слова struct, Π² пространствС ΠΈΠΌΡ‘Π½ структур (ΠΎΠ½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с пространствами ΠΈΠΌΡ‘Π½ Π‘++) создаётся Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Для доступа ΠΊ Π½Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слуТСбноС слово struct. МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слуТСбного слова typedef. Π’ΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ создан псСвдоним для нашСй структуры, Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ Π² глобальном контСкстС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚ΠΈΠΏΠΎΠΌ Point Π½Π΅Ρ‚ нСобходимости ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠΈΡΠ°Ρ‚ΡŒ слово struct. Π”Π²Π° объявлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎ

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Если ΠΌΡ‹ создаём Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ-структуру, ΠΏΠΎΠ»Π΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° этот ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‚ΠΎ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ явно с использованиСм слуТСбного слова struct

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° структуру

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру создаётся ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ полям структуры Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ «ΡΡ‚Ρ€Π΅Π»ΠΊΠ°» (минус + большС). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ – ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ число – Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ПолС этого Π²Π²ΠΎΠ΄ΠΈΡ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. Π’Ρ€Π΅Ρ‚ΡŒΠ΅ ΠΏΠΎΠ»Π΅ β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ – задаётся автоматичСски. ПослС этого всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ выводятся Π½Π° экран.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ массива структур: ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ экзСмпляра структуры ΠΎΠ½ Π½Π΅ удаляСт своих ΠΏΠΎΠ»Π΅ΠΉ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ поля, послС этого ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ сам массив.
ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ jsonUser ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° экзСмпляр структуры, поэтому Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступ Π΄ΠΎ ΠΏΠΎΠ»Π΅ΠΉ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° стрСлка.

Устройство структуры Π² памяти

Поля структуры располоТСны Π² памяти Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π’ΠΈΠΏ поля опрСдСляСт сдвиг ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ поля. Имя поля β€” это сдвиг ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ адрСса экзСмпляра. На самом Π΄Π΅Π»Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ структуры Π½Π΅ всСгда Ρ€Π°Π²Π΅Π½ суммС Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΅Ρ‘ ΠΏΠΎΠ»Π΅ΠΉ: это связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ компилятор ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ располоТСниС структуры Π² памяти ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ поля нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠΎΠ΄Π³ΠΎΠ½ΡΡ‚ΡŒ Π΄ΠΎ Ρ‡Ρ‘Ρ‚Π½Ρ‹Ρ… адрСсов.

ΠŸΠ΅Ρ€Π²Π°Ρ структура Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ 6 Π±Π°ΠΉΡ‚, вторая 8 Π±Π°ΠΉΡ‚, Ρ‚Ρ€Π΅Ρ‚ΡŒΡ 7 Π±Π°ΠΉΡ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° 32-разрядной машинС компилятор VC сдСлаСт ΠΈΡ… всС Ρ‚Ρ€ΠΈ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ 8 Π±Π°ΠΉΡ‚. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ поля располоТСны Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Π½ΠΎ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ.

Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΡƒ структур Π² памяти. МоТно явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ компилятору ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΡƒ ΠΏΠΎΠ»Π΅ΠΉ структуры, объСдинСний ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ΠΉ класса. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ это Π΄Π΅Π»Π°Ρ‚ΡŒ, зависит ΠΎΡ‚ компилятора. Один ΠΈΠ· самых распространённых способов ΠΏΡ€Π°Π³ΠΌΠ° pack()

Π£ Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ нСсколько разновидностСй, рассмотрим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ. pragma pack(n) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π±Π°ΠΉΡ‚Π°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ компилятора Π½Π΅ Π·Π°Π΄Π°Π½Ρ‹ для модуля значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ n 8. Допустимыми значСниями ΡΠ²Π»ΡΡŽΡ‚ΡΡ 1, 2, 4, 8 ΠΈ 16. Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ поля происходит ΠΏΠΎ адрСсу, ΠΊΡ€Π°Ρ‚Π½ΠΎΠΌΡƒ n ΠΈΠ»ΠΈ суммС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, какая ΠΈΠ· этих Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ мСньшС.

ИспользованиС #pragma pack Π½Π΅ привСтствуСтся: Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²ΠΈΡΠΈΡ‚ΡŒ ΠΎΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния структуры (Ссли, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚Π΅ΡΡŒ систСмным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ Π»ΠΎΠΌΠ°Π΅Ρ‚Π΅ Ρ‡ΡƒΠΆΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ сСти).

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΎΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ структуры ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ссли структуры ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ поля, Ρ‚ΠΎ нСльзя явно ΠΊΠ°ΡΡ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ структуру Π΄ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ это Ρ…Π°ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ

ΠŸΡ€ΠΈΠ²Π΅ΡΡ‚ΠΈ массив ΠΊ структурС (ΠΈΠ»ΠΈ Π»ΡŽΠ±ΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ) ΠΏΠΎ стандарту Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (хотя Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… компиляторах Π΅ΡΡ‚ΡŒ для этого инструмСнты).
Но Π² си Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ всё.

Но Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° сама ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅ΠΌ структуры. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: структура Model – модСль автомобиля, ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π½ΠΎΠΌΠ΅Ρ€, Π³ΠΎΠ΄ выпуска ΠΈ ΠΏΠΎΠ»Π΅ Make, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½ΠΎΠΌΠ΅Ρ€ ΠΌΠ°Ρ€ΠΊΠΈ ΠΈ Π΅Ρ‘ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ произвСсти Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

P.S. ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки Π½Π΅ стоит, здСсь Ρ‚Π°ΠΊ сдСлано Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° поля структуры ΠΈ Π½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° поля структуры ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° структура ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. НСмного ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: «Π΄Π΅Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ» Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π±Π΅Π·Ρ‹ΠΌΡΠ½Π½ΡƒΡŽ структуру ΠΈ Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° поля структуры Model:

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, Π² си, Π΄Π°ΠΆΠ΅ Ссли Ρƒ Π΄Π²ΡƒΡ… структур ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ поля, Π½ΠΎ структуры ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, Ρ‚ΠΎ ΠΈΡ… нСльзя ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ приходится ΠΈΠ·Π±Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΎΡ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… структур, Ссли Π½Π° Π½ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. МоТно ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Π·ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° char* Π½Π° ΠΏΠΎΠ»Π΅ структуры, Π½ΠΎ Π½Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ поля Π±ΡƒΠ΄ΡƒΡ‚ располоТСны Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

1. Π‘Ρ‚Π΅ΠΊ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ структуры «Π£Π·Π΅Π»», которая Ρ…Ρ€Π°Π½ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚ΠΈΠΏΠ° int) ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π». Π­Ρ‚ΠΎ нСэффСктивная рСализация, которая Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ удалСния ΠΈ выдСлСния памяти ΠΏΠΎΠ΄ ΡƒΠ·Π΅Π» ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ push ΠΈ pop.

2. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ структуру β€” массив, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами. Π’ΠΈΠΏ массива Π·Π°Π΄Π°Π΄ΠΈΠΌ макроподстановкой.

3. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Линия, состоит ΠΈΠ· Π΄Π²ΡƒΡ… структур Ρ‚ΠΎΡ‡Π΅ΠΊ. Для краткости Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°Ρ€Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ создания ΠΈ копирования Π»ΠΈΠ½ΠΈΠΈ. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², наша линия Ρ‚Π°ΠΊΠΆΠ΅ измСнится. Если структура содСрТит Π΄Ρ€ΡƒΠ³ΠΈΠ΅ структуры Π² качСствС ΠΏΠΎΠ»Π΅ΠΉ, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ содСрТимого всСх ΠΏΠΎΠ»Π΅ΠΉ. Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нСявных зависимостСй.

4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° комплСксноС число ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹. Π§Π°ΡΡ‚ΡŒ 2. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти для структуры. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры. ΠœΠ°ΡΡΠΈΠ²Ρ‹ native -структур

Данная Ρ‚Π΅ΠΌΠ° базируСтся Π½Π° Ρ‚Π΅ΠΌΠ°Ρ…:

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

1. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для структурной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ? ΠŸΡ€ΠΈΠΌΠ΅Ρ€ примСнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ sizeof

ОбъявлСниС структурной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ осущСствляСтся Π² 2 этапа:

  • объявлСниС шаблона структуры ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. На этом этапС ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ выдСляСтся. ЀормируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ информация ΠΎ содСрТимом структуры;
  • объявлСниС самой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. На этом этапС выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для любого поля (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ описываСтся Π² шаблонС структуры.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½ шаблон native -структуры, которая описываСт ΠΊΠ½ΠΈΠ³Ρƒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

ПослС Ρ‚Π°ΠΊΠΎΠ³ΠΎ описания ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ выдСляСтся.

Если ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Book , Ρ‚ΠΎΠ³Π΄Π° для Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π°.

Π Π°Π·ΠΌΠ΅Ρ€ памяти, которая выдСляСтся для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ B Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ: 70 + 50 + 4 + 4 = 128 Π±Π°ΠΉΡ‚. Для поля title выдСлится 70 Π±Π°ΠΉΡ‚ (Ρ‚ΠΈΠΏ char Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 1 Π±Π°ΠΉΡ‚). Для поля author выдСлится 50 Π±Π°ΠΉΡ‚. Для поля year (Π² Win32 ) выдСлится 4 Π±Π°ΠΉΡ‚Π° (Ρ‚ΠΈΠΏ int ). Для поля price выдСлится 4 Π±Π°ΠΉΡ‚Π° (Ρ‚ΠΈΠΏ float ).

Π’ зависимости ΠΎΡ‚ разрядности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ оборудования эта Ρ†ΠΈΡ„Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° памяти, которая выдСляСтся для структурной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

2. КакиС особСнности использования Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… структур Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…?

Π¨Π°Π±Π»ΠΎΠ½ любой структуры ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ структуры. Если Π² структурС описываСтся другая структурная-пСрСмСнная, Ρ‚ΠΎΠ³Π΄Π° для этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся согласно ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ выдСлСния памяти для структурной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (см. ΠΏ.1).

3. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ объявлСния ΠΈ использования Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ native -структуры

ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ Π΄Π²Π° шаблона структур, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Β«MyStruct.hΒ» :

– шаблон Point , ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠΉ плоскости:

– шаблон Triangle , ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π½Π° плоскости:

Π’ шаблонС Triangle описываСтся Ρ‚Ρ€ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… структуры (Ρ‚ΠΎΡ‡ΠΊΠΈ) Ρ‚ΠΈΠΏΠ° Point .

ДСмонстрация Ρ€Π°Π±ΠΎΡ‚Ρ‹ со структурой Triangle .

Для использования ΠΌΠ΅Ρ‚ΠΎΠ΄Π° strcpy() ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»Π° структуры Π½ΡƒΠΆΠ½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ модуля ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ:

Π’ native -структурС

  • ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ native -структуру;
  • ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ value -структуру;
  • нСльзя ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ref -структуру, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠΌ-ссылкой.
4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ объявлСния ΠΈ использованиС Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ref -структуры

ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½ шаблон ref -структуры, которая описываСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠΉ плоскости

Однако, эта структура ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ref -структурС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ ref -структурС:

  • ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ref -структуру;
  • ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ value -структуру;
  • нСльзя ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ native -структуру. БистСма Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСниС: Β«Mixed types are not supportedΒ» (Β«Π‘ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡΒ»).
5. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ объявлСния ΠΈ использования Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ value -структуры

ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ Π΄Π²Π° шаблона value -структур, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ ( Point_value ) ΠΈ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ( Triangle_value )

Π’ шаблонС value -структуры:

  • ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ value -структуру;
  • нСльзя ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ ref -структуру
  • нСльзя ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ native -структуру.
6. Как ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив структур ( native )? ΠŸΡ€ΠΈΠΌΠ΅Ρ€ объявлСния ΠΈ использования

Для native -структур объявлСния массива происходит классичСским для C/C++ способом.
ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½ шаблон структуры Point_native , которая описываСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° плоскости.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. ОбъявлСниС ΠΈ использованиС массива структур ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. ОбъявлСниС ΠΈ использованиС массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° native -структуры.

7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ объявлСния ΠΈ использования массива native -структур, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ структуры (Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π² структуру)

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ массив структур.

ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½ шаблон native -структуры Point_native , Ρ‡Ρ‚ΠΎ описываСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° плоскости

Массив ΠΈΠ· n Ρ‚ΠΎΡ‡Π΅ΠΊ ( n = 1..10) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ шаблона:

8. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ объявлСния ΠΈ использования Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива native -структур

ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½Π° native -структура, которая описываСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° плоскости.

Π’ΠΎΠ³Π΄Π°, Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом Ρ‚Π°ΠΊΠΈΡ… структур Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 5*10 Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΊ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ | C++

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ — это Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° классы ΠΈ Π½Π° массивы. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ элСмСнты, Π½ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ массива, Ρƒ элСмСнтов ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Β Ρ€Π°Π·Π½Ρ‹Π΅Β Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Листинг объявлСния структуры:

struct имя_структуры
{
Ρ‚ΠΈΠΏ_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ1 имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ1;
Ρ‚ΠΈΠΏ_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ2 имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ2;
Ρ‚ΠΈΠΏ_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ3 имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ3;
….
}; (Ρ‚ΠΎΡ‡ΠΊΠ° с запятой ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°!)



struct имя_структуры

{

Ρ‚ΠΈΠΏ_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ1 имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ1;

Ρ‚ΠΈΠΏ_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ2 имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ2;

Ρ‚ΠΈΠΏ_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ3 имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ3;

….

}; (Ρ‚ΠΎΡ‡ΠΊΠ° с запятой ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°!)

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создадим ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ для ΡƒΡ‡Ρ‘Ρ‚Π° роста Π΄Π΅Ρ‚Π΅ΠΉ:

struct card // card — имя структуры
{ // ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅
string name;
int age;
float hight;
};



struct card // card — имя структуры

{ // ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

string name;

int age;

float hight;

};

Как Π±Ρ‹Π»ΠΎ сказано Ρ€Π°Π½Π΅Π΅, структура — это Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, поэтому Ρ‡Ρ‚ΠΎΠ± ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр структуры card Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈ с простыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…:

ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡ€ΠΈ объявлСнии структуры ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой:

struct card
{

} Student, teacher, sport;



struct card

{

} Student, teacher, sport;

Для доступа ΠΊ полю структуры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ конструкция

имя_экзСмпляра_структуры.имя_поля



имя_экзСмпляра_структуры.имя_поля

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ элСмСнт структуры нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Ρ‘ поля:

card Tim;
Tim.name = «Anna»;
Tim.age = 15;
Tim.hight = 156.7;



card Tim;

Tim.name = «Anna»;

Tim.age = 15;

Tim.hight = 156.7;

Π₯-101/102, ΠΊΡ€Ρ‹Π»Π°Ρ‚Ρ‹Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹

Компания участник: Π Π°Π΄ΡƒΠ³Π°, ГосударствСнноС ΠœΠ°ΡˆΠΈΠ½ΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ конструкторскоС Π±ΡŽΡ€ΠΎ ΠΈΠΌ. А.Π―. БСрСзняка, АО

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΡ€Ρ‹Π»Π°Ρ‚Ρ‹Ρ… Ρ€Π°ΠΊΠ΅Ρ‚ для Π·Π°ΠΌΠ΅Π½Ρ‹ Π₯-55 Π² составС вооруТСния стратСгичСских бомбардировщиков-ракСтоносцСв Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Π΅Ρ‰Π΅ Π² сСрСдинС 80-Ρ… Π³ΠΎΠ΄ΠΎΠ². Π’Π΅Π»ΠΈΡΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ°ΠΊ Π½Π°Π΄ Π³ΠΈΠΏΠ΅Ρ€Π·Π²ΡƒΠΊΠΎΠ²Ρ‹ΠΌΠΈ, свСрхскоростными Ρ€Π°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΈ Π½Π°Π΄ Ρ€Π°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большСй Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‡Π΅ΠΌ Π₯-55. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ созданию силами ΠœΠšΠ‘ Β«Π Π°Π΄ΡƒΠ³Π°Β» Π² сСрСдинС 90-Ρ… Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ Π₯-101. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ бросковыС испытания ΡΠΎΡΡ‚ΠΎΡΠ»ΠΈΡΡŒ Π² 1995 Π³ΠΎΠ΄Ρƒ (ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ β€” Π² 1998). Π Π°ΠΊΠ΅Ρ‚Π° Π±Ρ‹Π»Π° принята Π½Π° Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ стратСгичСской Π°Π²ΠΈΠ°Ρ†ΠΈΠ΅ΠΉ России Π² 2012 Π³ΠΎΠ΄Ρƒ. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, судя ΠΏΠΎ ΠΎΠ±Ρ€Ρ‹Π²ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, выпускаСтся нСбольшими сСриями β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ испытания ΠΈ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π Π°ΠΊΠ΅Ρ‚Π° выпускаСтся Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ (Π₯-101) ΠΈ ядСрном (Π₯-102) оснащСнии. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ,Β Π₯-102 ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ большСй Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π·Π° счСт мСньшСй массы ΠΈ Π³Π°Π±Π°Ρ€ΠΈΡ‚ΠΎΠ² Π±ΠΎΠ΅Π²ΠΎΠΉ части. Π’Π°ΠΊΠΆΠ΅ вСсьма вСроятны отличия Π² систСмах навСдСния β€” Ρƒ ядСрной Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ Π½ΠΈΠΆΠ΅ трСбования ΠΊ точности, Π½ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΊ надСТности ΠΈ помСхозащищСнности.

ΠšΡ€Ρ‹Π»Π°Ρ‚Π°Ρ Ρ€Π°ΠΊΠ΅Ρ‚Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ поколСния ΠΈΠΌΠ΅Π΅Ρ‚ ряд качСствСнных ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΎΡ‚ Π₯-55. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, это Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Ρ‚Π°, Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‰Π°Ρ 5000βˆ’5500 ΠΊΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π΅ ΠΏΠΎ ΡΠΌΠ΅ΡˆΠ°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŽ. Π£ Π₯-55 ΠΎΠ½Π° Π² схоТСй ситуации 2000βˆ’2500 ΠΊΠΌ (Ρƒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π₯-55 БМ с ядСрной Π‘Π§ ΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π½Ρ‹ΠΌΠΈ Π±Π°ΠΊΠ°ΠΌΠΈ β€” Π΄ΠΎ 3500 ΠΊΠΌ). Расплатой стала ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²ΡˆΠ°ΡΡΡ масса Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹. Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ пуск Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π·ΠΎΠ½Ρ‹ дСйствия ΠŸΠ’Πž Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ носитСля, Π° больший запас ΠΏΠΎ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ позволяСт Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ бСзопасный ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ Π½Π° ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ°Π»Ρ‹Ρ… высотах с ΠΎΠ³ΠΈΠ±Π°Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π»ΡŒΠ΅Ρ„Π° мСстности β€” Π±ΠΎΠ»Π΅Π΅ бСзопасный, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ большСго расхода Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π°. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π΄ΠΎΡΡ‚ΠΈΠΆΠ΅Π½ΠΈΡŽ Ρ†Π΅Π»ΠΈ, являСтся ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ срСдств пониТСния Ρ€Π°Π΄ΠΈΠΎΠ»ΠΎΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ замСтности.

Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ качСствСнным ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² являСтся сочСтаниС высокой Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с Π²Ρ‹ΡΠΎΡ‡Π°ΠΉΡˆΠ΅ΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, Π² Ρ‚ΠΎΠΌ числС ΠΈ ΠΏΠΎ двиТущимся цСлям. Наряду с Π²Π·Π°ΠΈΠΌΠΎΠ΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠ½Π΅Ρ€Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈ спутниковой Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами Π½Π° Π₯-101 установлСна оптичСская Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° самонавСдСния. На ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ участкС коррСкция осущСствляСтся Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Β«Π‘ΠΏΡ€ΡƒΡ‚Β», Ρ‡Ρ‚ΠΎ обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пораТСния, Π² Ρ‚ΠΎΠΌ числС ΠΈ двиТущихся Ρ†Π΅Π»Π΅ΠΉ.

НоситСлями Ρ€Π°ΠΊΠ΅Ρ‚ сСмСйства Π₯-101/102 ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ стратСгичСскиС Π±ΠΎΠΌΠ±Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ-ракСтоносцыВу-95МБ (Π΄ΠΎ 8 Π½Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΡƒΠ·Π»Π°Ρ… подвСски) ΠΈ Π’Ρƒ-160 (Π΄ΠΎ 12 Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π±Π°Ρ€Π°Π±Π°Π½Π½Ρ‹Ρ… пусковых установках). Π•ΡΡ‚ΡŒ нСпровСрСнная информация ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² пСрспСктивС Π±ΡƒΠ΄Π΅Ρ‚ обСспСчСна ΠΈΡ… установка ΠΈ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΎΠΌΠ±Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ Π‘Ρƒ-34, ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ дальниС Π±ΠΎΠΌΠ±Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ Π’Ρƒ-22М3.

ВСхничСскиС характСристики

Π”Π»ΠΈΠ½Π°, ΠΌ:7,45
Π”ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€, ΠΌΠΌ742
Π Π°Π·ΠΌΠ°Ρ… ΠΊΡ€Ρ‹Π»Π°, ΠΌ3
Π‘Ρ‚Π°Ρ€Ρ‚ΠΎΠ²Ρ‹ΠΉ вСс, ΠΊΠ³2200β€”2400
Масса Π‘Π§, ΠΊΠ³400
Масса Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π°, ΠΊΠ³:1250
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΠΌ/c, крСйсСрская190β€”200
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΠΌ/c, максимальная250β€”270
Π”Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ пуска, ΠΊΠΌΠ΄ΠΎ 4500β€”5500 ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ
ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ полётаизмСняСмый
Высота профиля ΠΏΠΎΠ»Ρ‘Ρ‚Π°, ΠΌΠΎΡ‚ 30β€”70 Π΄ΠΎ 10 000
ЭПР, кв. м.0,01
Π’ΠΈΠΏ ГБНоптоэлСктронная систСма ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ + Π’Π’
Биловая ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ°Π”Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ Π”Π’Π Π” Π’Π Π”Π”-50А с тягой 450 кгс
Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ (ΠšΠ’Πž), ΠΌ5-6
Π―Π΄Π΅Ρ€Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹Π₯-102 (250 ΠΊΡ‚)

Π’ΠΈΠ΄Π΅ΠΎ

Как ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ «конструкторы» для конструкций Π² C

НСт ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ потрСбности. Если Ρƒ вас достаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ осознанный Π·Π²ΠΎΠ½ΠΎΠΊ, Π²Π°ΠΌ слСдуСт ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ. (НапримСр, Ссли ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ, форсированиС ΠΏΠ°Ρ€Ρ‹ malloc () / free () ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° какая-Ρ‚ΠΎ функция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ структуру, вСроятно, Π½Π΅ сработаСт.)

Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, Π½Π΅ потрСбуСтся ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π° ΠΎΠ±Π°:

void example_init (struct example * p, int x, int y, int z) — Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ структуру, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ p . Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ΠΎ Π»ΡŽΠ±Ρ‹ΠΌ, Ρƒ ΠΊΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ структуры , Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ автоматичСский, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² ΠΊΡƒΡ‡Π΅ ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ· ΠΏΡƒΠ»Π°.

void example_destroy (struct example * p) — Π”Π΅Π»Π°Π΅Ρ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Π΄Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ структуры, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ p .(Π’ вашСм случаС это освободит ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π° .) ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ освобоТдаСт , Π° Π½Π΅ , p , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π·Π½Π°Π΅Ρ‚, находится Π»ΠΈ структура Π² ΠΊΡƒΡ‡Π΅ ΠΈΠ»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π°Π±ΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ собираСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ, снова вызывая example_init () .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ структуры * example_new (int x, int y, int z) — ВыдСляСт пространство для структуры Π² ΠΊΡƒΡ‡Π΅, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ example_init () ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

void example_del (struct example * p) — Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ example_destroy (p) ΠΈ Π·Π°Ρ‚Π΅ΠΌ освобоТдаСт p .

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ сущСствуСт ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°ΡΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρ‹ ΠΈΠ· Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² example_init () / example_del () ΠΈΠ»ΠΈ example_new () / example_destroy () . Π’Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ valgrind ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ free () , ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ автоматичСски. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΡΡ Π±Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² структурС, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна, ΠΊΠΎΠ³Π΄Π° структура Π±Ρ‹Π»Π° Π² ΠΊΡƒΡ‡Π΅, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ утвСрТдСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ.( example_del () Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ example_destroy () .)

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ списки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ²

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ — это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ нСстатичСская функция-Ρ‡Π»Π΅Π½ класса, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого Ρ‚ΠΈΠΏΠ° класса.

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ конструктора класса список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ для прямых ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±Π°Π· ΠΈ нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ….
(НС ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с std :: initializer_list.)

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сопрограммой.

(начиная с C ++ 20)

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] Бинтаксис

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с использованиСм Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹:

имя класса ( список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) ) except-spec (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) attr (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) (1)

Π“Π΄Π΅ имя-класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ класс (ΠΈΠ»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ шаблона класса), ΠΈΠ»ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ объявлСно Π² области пространства ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ Π² объявлСнии Π΄Ρ€ΡƒΠ³Π°, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ класса.

ЕдинствСнными спСцификаторами, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² decl-спСцификаторС-seq объявлСния конструктора, ΡΠ²Π»ΡΡŽΡ‚ΡΡ friend , inline , constexpr (начиная с C ++ 11), consteval (начиная с C ++ 20) ΠΈ явный (Π² частности, Π½Π΅ допускаСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ cv- ΠΈ ref Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ: сСмантика const ΠΈ volatile для строящСгося ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ срабатываСт, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ конструктор.

Π’Π΅Π»ΠΎ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ любого конструктора ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобкой составного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ² , синтаксис ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся символом двоСточия : , Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт список Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²-Ρ‡Π»Π΅Π½ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

класс-ΠΈΠ»ΠΈ-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ( список-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) ) (1)
список-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… скобок класса ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° (2) (начиная с C ++ 11)
ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ... (3) (начиная с C ++ 11)
класс ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ любой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ нСстатичСский Ρ‡Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ любоС имя Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ сам класс (для дСлСгирования конструкторов), Π»ΠΈΠ±ΠΎ ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π±Π°Π·Ρƒ.
список Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, пустой, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ запятыми список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ конструктору Π±Π°Π·Ρ‹ ΠΈΠ»ΠΈ Ρ‡Π»Π΅Π½Π°
список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми, ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ списки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках
ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² имя ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ шаблона
 struct S {
    int n;
    S (ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»); // объявлСниС конструктора
    S (): n (7) {} // ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ конструктора
                  // ": n (7)" - список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²
                  // ": n (7) {}" - Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
};
S :: S (int x): n {x} {} // ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ конструктора: ": n {x}" - это список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²
int main ()
{
    SS; // Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ S :: S ()
    S s2 (10); // Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ S :: S (int)
} 

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ОбъяснСниС

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.Они Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Π±Π΅Π· явного спСцификатора ΡΠ²Π»ΡΡŽΡ‚ΡΡ конструкторами прСобразования. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ со спСцификатором constexpr Π΄Π΅Π»Π°ΡŽΡ‚ свой Ρ‚ΠΈΠΏ LiteralType. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΡΠ²Π»ΡΡŽΡ‚ΡΡ конструкторами ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΡΠ²Π»ΡΡŽΡ‚ΡΡ конструкторами копирования ΠΈ конструкторами пСрСмСщСния.

ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ составного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ конструктора, инициализация всСх прямых Π±Π°Π·, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±Π°Π· ΠΈ нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.Бписок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² элСмСнтов — это мСсто, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΈ нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ссылочныС ΠΈ константныС Ρ‚ΠΈΠΏΡ‹, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‡Π»Π΅Π½ΠΎΠ². Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π½Π΅ выполняСтся для Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… объСдинСний ΠΈΠ»ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ², Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Ρ‡Π»Π΅Π½Π°.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… класс ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π²ΠΎ врСмя создания любого класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классом создаваСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ИмСна, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² спискС-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ спискС-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² области дСйствия конструктора:

 класс X {
    int a, b, i, j;
ΠΎΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ:
    const int & r;
    X (int я)
      : r (a) // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ X :: r для ссылки Π½Π° X :: a
      , b {i} // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ X :: b Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° i
      , i (i) // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ X :: i Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° i
      , j (this-> i) // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ X :: j Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ X :: i
    {}
}; 

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΈΠ· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ², ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π±Π»ΠΎΠΊΠΎΠΌ function-try-block

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹) ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² элСмСнтов, Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Ссли Π½Π΅ всС прямыС Π±Π°Π·Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² этой Ρ‚ΠΎΡ‡ΠΊΠ΅.

Для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (Ссли прямыС Π±Π°Π·Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² этой Ρ‚ΠΎΡ‡ΠΊΠ΅) ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΠ· конструкторов ΠΈ дСструкторов: Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ Π²Π΅Π΄ΡƒΡ‚ сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ динамичСский Ρ‚ΠΈΠΏ * это статичСский Ρ‚ΠΈΠΏ создаваСмый класс (динамичСская ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π½Π΅ распространяСтся Π²Π½ΠΈΠ· ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования) ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ (Π½ΠΎ Π½Π΅ статичСскиС Π²Ρ‹Π·ΠΎΠ²Ρ‹) чистым Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ функциям-Ρ‡Π»Π΅Π½Π°ΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ.

Если нСстатичСский Ρ‡Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Ρ‡Π»Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ появляСтся Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π»Π΅Π½Π°, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Ρ‡Π»Π΅Π½Π°, Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Ρ‡Π»Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ игнорируСтся:

 struct S {
    int n = 42; // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Ρ‡Π»Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    S (): n (7) {} // установит n Ρ€Π°Π²Π½Ρ‹ΠΌ 7, Π° Π½Π΅ 42
}; 
(начиная с C ++ 11)

БсылочныС элСмСнты Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ привязаны ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² элСмСнтов:

 struct A {
    A (): v (42) {} // Ошибка
    const int & v;
}; 

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ρ‚ΠΎ ΠΆΠ΅ самоС относится ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ Ρ‡Π»Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π”Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор

Если имя самого класса появляСтся ΠΊΠ°ΠΊ класс ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ², Ρ‚ΠΎ список Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· этого ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π°; Ρ‚Π°ΠΊΠΎΠΉ конструктор извСстСн ΠΊΠ°ΠΊ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор , Π° конструктор, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ СдинствСнным Ρ‡Π»Π΅Π½ΠΎΠΌ списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², являСтся Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ конструктором

Π’ этом случаС Ρ†Π΅Π»Π΅Π²ΠΎΠΉ конструктор выбираСтся ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ выполняСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ возвращаСтся конструктору дСлСгирования, ΠΈ Π΅Π³ΠΎ Ρ‚Π΅Π»ΠΎ выполняСтся.

Π”Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ конструкторы Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ рСкурсивными.

 class Foo {
ΠΎΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ:
  Foo (char x, int y) {}
  Foo (int y): Foo ('a', y) {} // Foo (int) Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Foo (char, int)
}; 
НаслСдованиС конструкторов

Π‘ΠΌ. ЗаявлСниС ΠΎΠ± использовании.

(начиная с C ++ 11)
[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² элСмСнтов Π² спискС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния: фактичСский порядок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

1) Если конструктор ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±Π°Π·Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ объявлСний Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ (слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ относится ΠΊ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ Π²ΠΈΠ΄Ρƒ). Π² списках Π±Π°Π·ΠΎΠ²Ρ‹Ρ… спСцификаторов)

2) Π—Π°Ρ‚Π΅ΠΌ прямыС Π±Π°Π·Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² порядкС слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² спискС Π±Π°Π·ΠΎΠ²Ρ‹Ρ… спСцификаторов этого класса

3) Π—Π°Ρ‚Π΅ΠΌ нСстатичСскиС элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² порядкС объявлСния Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса.

4) НаконСц, выполняСтся Ρ‚Π΅Π»ΠΎ конструктора

(ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли порядок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ контролируСтся появлСниСм Π² списках ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… конструкторов, Ρ‚ΠΎ дСструктор Π½Π΅ смоТСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ порядок уничтоТСния являСтся ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ порядку построСния)

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠŸΡ€ΠΈΠΌΠ΅Ρ€

 #include 
#include <строка>
#include <ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ>

struct Base {
    int n;
};

struct Class: общСдоступная Π±Π°Π·Π°
{
    Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ символ x;
    Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ char y;
    std :: mutex m;
    std :: lock_guard  lg;
    std :: fstream f;
    std :: string s;

    Класс (int x)
      : Base {123}, // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс
        x (x), // x (Ρ‡Π»Π΅Π½) инициализируСтся x (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€)
        y {0}, // y инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0
        f {"test.cc ", std :: ios :: app}, // это происходит послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ m ΠΈ lg
        s (__ func__), // __ func__ доступСн, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ init-list являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ конструктора
        lg (m), // lg ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ m, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½
        m {} // m инициализируСтся ΠΏΠ΅Ρ€Π΅Π΄ lg, хотя здСсь ΠΎΠ½ появляСтся послСдним
    {} // пустой составной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

    Класс (двойной а)
      : Ρƒ (Π° + 1),
        x (y), // x Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠ΅Ρ€Π΅Π΄ y, Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ здСсь Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ
        lg (ΠΌ)
    {} // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ отобраТаСтся Π² спискС, это
       // инициализируСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ использовалась Base (), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ value-init)

    Класс()
    try // Π±Π»ΠΎΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-try начинаСтся ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅Π»ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
      : Класс (0.0) // конструктор Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°
    {
        // ...
    }
    Π»ΠΎΠ²ΠΈΡ‚ΡŒ (...)
    {
        // ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
    }
};

int main () {
    Класс c;
    Класс c1 (1);
    Класс c2 (0,1);
} 

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠžΡ‚Ρ‡Π΅Ρ‚Ρ‹ ΠΎ Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°Ρ…

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π½ΠΈΠΆΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ ΠΎ Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°Ρ…, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ Π·Π°Π΄Π½ΠΈΠΌ числом ΠΊ ​​ранСС ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΌ стандартам C ++.

БсылочныС элСмСнты

DR ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ ΠΊ ПовСдСниС, ΠΊΠ°ΠΊ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
CWG 1696 C ++ 98 ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ
(врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… закончится Π² ΠΊΠΎΠ½Ρ†Π΅ ctor)
Ρ‚Π°ΠΊΠΎΠΉ init Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ сформирован

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] Бсылки

  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ C ++ 11 (ISO / IEC 14882: 2011):
  • 12.1 ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ [class.ctor]
  • 12.6.2 Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π±Π°Π· ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² [class.base.init]
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ C ++ 98 (ISO / IEC 14882: 1998):
  • 12.1 ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ [class.ctor]
  • 12.6.2 Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π±Π°Π· ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² [class.base.init]

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅

БопоставлСниС Ρ‚ΠΈΠΏΠΎΠ² структур ΠΈ объСдинСний ΠΈΠ· C — ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ

Π­Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ пост Π² сСрии.Π‘Π°ΠΌΡ‹ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΌ курсом этой сСрии являСтся БопоставлСниС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· C. Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сопоставлСния ΠΈΠ· C ΠΈ Mapping Strings ΠΈΠ· руководств C.

Π’ этом руководствС Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅:

БопоставлСниС структур ΠΈ объСдинСний Ρ‚ΠΈΠΏΠΎΠ² C

Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΠΎΠ½ΡΡ‚ΡŒ сопоставлСниС ΠΌΠ΅ΠΆΠ΄Ρƒ Kotlin ΠΈ C — это ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠœΡ‹ объявим структуру ΠΈ объСдинСниС Π½Π° языкС C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Kotlin.

Kotlin / Native поставляСтся с инструмСнтом cinterop , инструмСнт Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ привязки ΠΌΠ΅ΠΆΠ΄Ρƒ языком C ΠΈ Kotlin.Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» .def , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ C для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π‘ΠΎΠ»Π΅Π΅ подробная информация обсуТдаСтся Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅ «ВзаимодСйствиС с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ C.

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ руководствС Π²Ρ‹ создали Ρ„Π°ΠΉΠ» lib.h . На этот Ρ€Π°Π· Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ эти объявлСния нСпосрСдствСнно Π² Ρ„Π°ΠΉΠ» interop.def послС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ строки --- :

typedef struct {
int a;
Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±;
} MyStruct;

void struct_by_value (MyStruct s) {}
void struct_by_pointer (MyStruct * s) {}

typedef union {
int a;
MyStruct b;
float c;
} MyUnion;

void union_by_value (MyUnion u) {}
void union_by_pointer (MyUnion * u) {}

ВзаимодСйствиС .def достаточно для компиляции ΠΈ запуска прилоТСния ΠΈΠ»ΠΈ открытия Π΅Π³ΠΎ Π² срСдС IDE. ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² IntelliJ IDEA ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сгСнСрированных API-интСрфСйсов Kotlin для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C

Π₯отя ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ ΠΏΡƒΡ‚Π΅ΠΌ объСдинСния Π΅Π΅ с Ρ„Π°ΠΉΠ»ΠΎΠΌ сцСнария (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, .sh ΠΈΠ»ΠΈ .bat Ρ„Π°ΠΉΠ»ΠΎΠΌ), этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠΏΠ»ΠΎΡ…ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с сотнями Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’ΠΎΠ³Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ компилятор Kotlin / Native с систСмой сборки, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ компилятора Kotlin / Native с Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ зависимостями ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ компилятор ΠΈ тСсты.Kotlin / Native ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму сборки Gradle Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ»Π°Π³ΠΈΠ½ kotlin-multiplatform.

ΠœΡ‹ рассмотрСли основы настройки IDE-совмСстимого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с Gradle Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅ A Basic Kotlin / Native Application. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΅Π³ΠΎ, Ссли Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ шаги ΠΈ инструкции ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Kotlin / Native ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ Π² IntelliJ IDEA. Π’ этом руководствС ΠΌΡ‹ рассмотрим Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности взаимодСйствия с C для Kotlin / Native ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… сборок с Gradle.

Π‘Π½Π°Ρ‡Π°Π»Π° создайтС ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ВсС ΠΏΡƒΡ‚ΠΈ Π² этом руководствС Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ этой ΠΏΠ°ΠΏΠΊΠ΅. Иногда Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π½ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» сборки build.gradle (.kts) Gradle:

plugins {
ΠΊΠΎΡ‚Π»ΠΈΠ½ («ΠΌΡƒΠ»ΡŒΡ‚иплатформСнная») вСрсия «1.5.31»
}

Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ {
mavenCentral ()
}

kotlin {
linuxX64 («native») {// Π² Linux
// macosX64 («Ρ€ΠΎΠ΄Π½ΠΎΠΉ») {// Π½Π° x86_64 macOS
// macosArm64 («native») {// Π² Apple Silicon macOS
// mingwX64 («native») {// Π² Windows
val main компиляциями.ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ
val взаимодСйствиС ΠΎΡ‚ main.cinterops.creating

Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ {
исполняСмый Ρ„Π°ΠΉΠ» ()
}
}
}

tasks.wrapper {
gradleVersion = «6.7.1»
distributionType = Wrapper.DistributionType.BIN
}

ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ {
id ‘org.jetbrains.kotlin.multiplatform’ вСрсия ‘1.5.31’
}

Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ {
mavenCentral ()
}

kotlin {
linuxX64 (‘native’) {// Π² Linux
// macosX64 («Ρ€ΠΎΠ΄Π½ΠΎΠΉ») {// Π½Π° x86_64 macOS
// macosArm64 («native») {// Π² Apple Silicon macOS
// mingwX64 (‘native’) {// Π² Windows
сборники.main.cinterops {
взаимодСйствиС
}

Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ {
исполняСмый Ρ„Π°ΠΉΠ» ()
}
}
}

wrapper {
gradleVersion = ‘6.7.1’
distributionType = ‘BIN’
}

Π€Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° настраиваСт взаимодСйствиС C ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап сборки. Π”Π°Π²Π°ΠΉΡ‚Π΅ пСрСмСстим Ρ„Π°ΠΉΠ» interop.def Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ src / nativeInterop / cinterop . Gradle Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ соглашСния вмСсто ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, исходныС Ρ„Π°ΠΉΠ»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ src / nativeMain / kotlin .По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС символы ΠΈΠ· C ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ interop , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь ΠΏΠ°ΠΊΠ΅Ρ‚ Π² наши Ρ„Π°ΠΉΠ»Ρ‹ .kt . ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½Π° kotlin-multiplatform, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎΠ±ΠΎ всСх Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… способах Π΅Π³ΠΎ настройки.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»-Π·Π°Π³Π»ΡƒΡˆΠΊΡƒ src / nativeMain / kotlin / hello.kt со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ объявлСния C Π²ΠΈΠ΄Π½Ρ‹ ΠΈΠ· Kotlin:

import interop. *

fun main () {
println («ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠšΠΎΡ‚Π»ΠΈΠ½ / Π ΠΎΠ΄Π½ΠΎΠΉ!»)

struct_by_value (/ * ΠΈΡΠΏΡ€Π°Π²ΡŒ мСня * /)
struct_by_pointer (/ * ΠΈΡΠΏΡ€Π°Π²ΡŒ мСня * /)
union_by_value (/ * ΠΈΡΠΏΡ€Π°Π²ΡŒ мСня * /)
union_by_pointer (/ * ΠΈΡΠΏΡ€Π°Π²ΡŒ мСня * /)
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² IntelliJ IDEA ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.ΠŸΡ€ΠΈ этом посмотритС, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ C ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Kotlin / Native.

ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π² Kotlin

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ IntelliJ IDEA ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ | ОбъявлСниС ΠΈΠ»ΠΈ ошибки компилятора, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сгСнСрированный API для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ C, struct ΠΈ union :

fun struct_by_value (s: CValue )
fun struct_by_pointer (s: CValuesRef ?)

вСсСло union_by_value (u: CValue )
fun union_by_pointer (u: CValuesRef ?)

конструктор класса MyStruct (rawPtr: NativePtr / * = NativePtr * /): CStructVar {
var a: Int
var b: Double
ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: CStructVar.Π’ΠΈΠΏ
}

конструктор класса MyUnion (rawPtr: NativePtr / * = NativePtr * /): CStructVar {
var a: Int
val b: MyStruct
var c: Float
ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: CStructVar.Type
}

Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ cinterop сгСнСрировал Ρ‚ΠΈΠΏΡ‹ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для Π½Π°ΡˆΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² struct ΠΈ union . Для объявлСний Ρ‚ΠΈΠΏΠΎΠ² MyStruct ΠΈ MyUnion Π² C ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ классы Kotlin MyStruct ΠΈ MyUnion соотвСтствСнно. ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CStructVar ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ всС поля ΠΊΠ°ΠΊ свойства Kotlin.Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ CValue для прСдставлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° структуры ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ CValuesRef? , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ указатСля Π½Π° структуру ΠΈΠ»ΠΈ объСдинСниС.

ВСхничСски Π½Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ struct ΠΈ union Π½Π° сторонС Kotlin. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ свойства a , b ΠΈ c класса MyUnion Π² Kotlin ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ мСсто Π² памяти для чтСния / записи своСго значСния, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ union Π½Π° языкС C.

Π‘ΠΎΠ»Π΅Π΅ подробная информация ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования прСдставлСны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
C Interop

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏΡ‹ структур ΠΈ объСдинСний ΠΈΠ· Kotlin

Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ классы-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для Ρ‚ΠΈΠΏΠΎΠ² C struct ΠΈ union ΠΈΠ· Kotlin Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Благодаря сгСнСрированным свойствам каТСтся СстСствСнным ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΊΠΎΠ΄Π΅ Kotlin. Пока Ρ‡Ρ‚ΠΎ СдинствСнный вопрос — ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр для этих классов. Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· объявлСний MyStruct ΠΈ MyUnion , ΠΈΡ… конструкторам трСбуСтся NativePtr .ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с указатСлями Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ВмСсто этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Kotlin API для создания экзСмпляров этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для нас.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° сгСнСрированныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ наши MyStruct ΠΈ MyUnion Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ прСдставлСны ΠΊΠ°ΠΊ kotlinx.cinterop.CValue . А для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ указатСля Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ kotlinx.cinterop.CValuesRef . Kotlin прСдоставляСт Π½Π°ΠΌ API для простой Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΠΎΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΈ посмотрим.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ CValue

CValue Π’ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ C. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ cValue , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° CValue . Ѐункция Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠΌ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° C. Ѐункция объявлСна β€‹β€‹ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

fun cValue (initialize: T. () -> Unit): CValue

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΡ€Π° ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ cValue ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ:

fun callValue () {

val cStruct = cValue {
Π° = 42
Π± = 3.14
}
struct_by_value (cStruct)

val cUnion = cValue {
b.a = 5
b.b = 2,7182
}

union_by_value (cUnion)
}

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ структуру ΠΈ объСдинСниС ΠΊΠ°ΠΊ CValuesRef

CValuesRef Π’ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Kotlin для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ указатСля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ C. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Π°ΠΌ понадобится экзСмпляр классов MyStruct ΠΈ MyUnion . Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… прямо Π² Ρ€ΠΎΠ΄Π½ΠΎΠΉ памяти. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅

fun alloc (): T

Ѐункция Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

Π½Π° kotlinx.cinterop.NativePlacement для этого.

NativePlacement прСдставляСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ с функциями, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ malloc ΠΈ free . БущСствуСт нСсколько Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ NativePlacement . Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ вызываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ kotlinx.cinterop.nativeHeap ΠΈ Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ nativeHeap.free (..) , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ послС использования.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

fun memScoped (block: kotlinx.cinterop.MemScope. () -> R): R

функция. Он создаСт ΠΊΡ€Π°Ρ‚ΠΊΠΎΡΡ€ΠΎΡ‡Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ выдСлСния памяти, ΠΈ всС выдСлСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‡ΠΈΡ‰Π΅Π½Ρ‹ автоматичСски Π² ΠΊΠΎΠ½Ρ†Π΅ Π±Π»ΠΎΠΊΠ° .

Π’Π°Ρˆ ΠΊΠΎΠ΄ для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с указатСлями Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

fun callRef () {
memScoped {
val cStruct = alloc ()
cStruct.a = 42
cStruct.b = 3,14

struct_by_pointer (cStruct.ptr)

val cUnion = alloc ()
cUnion.b.a = 5
cUnion.b.b = 2,7182

union_by_pointer (cUnion.ptr)
}
}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ свойство Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ptr , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ происходит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° лямбда-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° memScoped , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ экзСмпляры MyStruct ΠΈ MyUnion Π² собствСнныС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.

ΠšΠ»Π°ΡΡΡ‹ MyStruct ΠΈ MyUnion ΠΈΠΌΠ΅ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Π½ΠΈΠ·Ρƒ. ΠŸΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСна, ΠΊΠΎΠ³Π΄Π° функция memScoped Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π²Π½ΠΎ ΠΊΠΎΠ½Ρ†Ρƒ Π΅Π΅ Π±Π»ΠΎΠΊΠ° .Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π° memScoped . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Arena () ΠΈΠ»ΠΈ nativeHeap для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны дольшС ΠΈΠ»ΠΈ ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ CValue ΠΈ CValuesRef

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΅ΡΡ‚ΡŒ случаи использования, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ структуру Π² качСствС значСния ΠΎΠ΄Π½ΠΎΠΌΡƒ Π²Ρ‹Π·ΠΎΠ²Ρƒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ структуру Π² качСствС ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ². Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π² Kotlin / Native. Π—Π΄Π΅ΡΡŒ потрСбуСтся NativePlacement .

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим CValue сначала прСвращаСтся Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ:

fun callMix_ref () {
val cStruct = cValue {
Π° = 42
Π± = 3,14
}

memScoped {
struct_by_pointer (cStruct.ptr)
}
}

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ свойство Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ptr , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ происходит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° лямбда-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° memScoped , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ экзСмпляры MyStruct ΠΈ MyUnion Π² собствСнныС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π­Ρ‚ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° memScoped .

Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ прСобразования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ readValue () :

fun callMix_value () {
memScoped {
val cStruct = alloc ()
cStruct.a = 42
cStruct.b = 3,14

struct_by_value (cStruct.readValue ())
}
}

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ΄

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ объявлСния C Π² своСм ΠΊΠΎΠ΄Π΅, Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ это Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ исправим ΠΊΠΎΠ΄ ΠΈ посмотрим, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π²Ρ‹Π·Π²Π°Π² Π·Π°Π΄Π°Ρ‡Ρƒ runDebugExecutableNative Gradle Π² срСдС IDE ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

./ gradlew runDebugExecutableNative

ПослСдний ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»Π΅ hello.kt ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

import interop. *
ΠΈΠΌΠΏΠΎΡ€Ρ‚ kotlinx.cinterop.alloc
import kotlinx.cinterop.cValue
import kotlinx.cinterop.memScoped
ΠΈΠΌΠΏΠΎΡ€Ρ‚ kotlinx.cinterop.ptr
import kotlinx.cinterop.readValue

fun main () {
println («ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠšΠΎΡ‚Π»ΠΈΠ½ / Π ΠΎΠ΄Π½ΠΎΠΉ!»)

val cUnion = cValue {
b.a = 5
b.b = 2,7182
}

memScoped {
union_by_value (cUnion)
union_by_pointer (cUnion.ptr)
}

memScoped {
val cStruct = alloc {
Π° = 42
Π± = 3.14
}

struct_by_value (cStruct.readValue ())
struct_by_pointer (cStruct.ptr)
}
}

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² языка C ΠΈ ΠΈΡ… прСдставлСния Π² Kotlin / Native Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… руководствах:

ДокумСнтация C Interop ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ слоТныС сцСнарии взаимодСйствия.

ПослСднСС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: 08 сСнтября 2021 Π³.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ странный синтаксис элСмСнта-двоСточия (Β«:Β») Π² конструкторС? | Π‘Π°ΠΉ КамСш

Π­Ρ‚ΠΎ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ участников .

Π­Ρ‚ΠΎ инициализация конструктора. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² Π² конструкторС класса, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² конструктора ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ:

Ρ‚ΠΈΠΏ 1: ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ

struct TestStruct {

int id;

TestStruct ()

{

id = 42;

}

};

Ρ‚ΠΈΠΏ 2: ΠΌΡ‹ пишСм Ρ‚ΠΎ ΠΆΠ΅ самоС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²,

struct TestStruct {

int id;

Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€;

TestStruct (): id (42) {}

};

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Point (int i = 0, int j = 0): x (i), y (j) {}

Π£ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ использованиС списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² качСствС конструктора Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записано ΠΊΠ°ΠΊ:

Point (int i = 0, int j = 0) {

x = i;

y = j;

}

простая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ².

CPP ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². Java Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ

Π’ C ++ списки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΈΠ·-Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… языковых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Java, Π»ΠΈΠ±ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Π² Java:

  1. const: Π² C ++ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ поля, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ const, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ присвоСны ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². Π’ Java Π΅ΡΡ‚ΡŒ поля final, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΈΡ… полям final Π² Ρ‚Π΅Π»Π΅ конструктора.Π’ C ++ присвоСниС константному полю Π² конструкторС нСдопустимо.
  2. Бсылки: Π’ C ++ ссылки (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для привязки ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ссылки Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ. Π’ C ++ это указываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, Ссли Π±Ρ‹ Π²Ρ‹ ΡΡΡ‹Π»Π°Π»ΠΈΡΡŒ Π½Π° ссылку Π² Ρ‚Π΅Π»Π΅ конструктора Π±Π΅Π· Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²Ρ‹ Π±Ρ‹ использовали Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ссылку. Π’ Java ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ ссылки Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ C ++ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ присвоСны ΠΈΠΌ послС создания.Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ΠΈ просто ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ.
  3. ΠŸΡ€ΡΠΌΡ‹Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’ C ++ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСпосрСдствСнно Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ»Π΅ΠΉ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² Java ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылок Π½Π° эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² C ++, Ссли Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ строку Π² качСствС Ρ‡Π»Π΅Π½Π°, пространство для хранСния этой строки встроСно нСпосрСдствСнно Π² пространство для самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² Java Π²Ρ‹ просто ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ мСсто для ссылки Π½Π° ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ строку ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ хранится Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, C ++ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ этим ΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ΠΈ просто останутся Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ.По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для этих Ρ‚ΠΈΠΏΠΎΠ², Π½ΠΎ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструктор ΠΈΠ»ΠΈ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ нСдоступСн, список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ способ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это. Π’ Java Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎΠ± этом, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ссылки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΈΡ… для ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΡΡΡ‹Π»Π°Π»ΠΈΡΡŒ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструктор, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ конструктора ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис для Π½Π΅Π³ΠΎ; просто установитС ссылку Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ конструктора.
  4. Π’ Ρ‚Π΅Ρ… Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях, ΠΊΠΎΠ³Π΄Π° Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ списки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π²Ρ‹Π·ΠΎΠ²Π° конструкторов супСркласса ΠΈΠ»ΠΈ присвоСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΅Π³ΠΎ полям), это обрабатываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языковых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ: ΡΡƒΠΏΠ΅Ρ€ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово для Π²Ρ‹Π·ΠΎΠ²Π° конструкторов супСркласса ΠΈ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Java ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ своим полям значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Ρ‚ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹.

    Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

    Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *