Информация об изменениях

Сообщение Re[3]: Инициализация через initializer_list и protected/priv от 30.05.2022 20:23

Изменено 30.05.2022 20:28 rg45

Re[3]: Инициализация через initializer_list и protected/private
Здравствуйте, Marty, Вы писали:

M>>
    Test (int vi1, int vi2, int vi3){ i1 = vi1; i2 = vi2; i3 = vi3; }


M>а) без лишней писанины уже не получается

M>б) не надо ли тогда и другие конструкторы описывать хотя бы как = default?

Так добавь значения по умалчанию к формальным параметрам конструктора и инициализация получится по форме очень похожа на агрегатную:

http://coliru.stacked-crooked.com/a/2f8d4fc77dc7b73b

#include <iostream>

struct Test
{
    int i1;
    int i2;

protected:    

    int i3;

public:

    Test(int i1 = {}, int i2 = {}, int i3 = {}) : i1(i1), i2(i2), i3(83) {}

    int getI3() const { return i3; }
    void setI3( int vi3 ) { i3 = vi3; }
};

int main()
{
    Test x;
    Test y{1};
    Test z{1, 2};


    Test t{ 1, 2, 3 };
    //Test t = { 1, 2, 3 };

    std::cout << t.i1 << ", " << t.i2 << "\n";
}
Re[3]: Инициализация через initializer_list и protected/priv
Здравствуйте, Marty, Вы писали:

M>>
    Test (int vi1, int vi2, int vi3){ i1 = vi1; i2 = vi2; i3 = vi3; }


M>а) без лишней писанины уже не получается

M>б) не надо ли тогда и другие конструкторы описывать хотя бы как = default?

Так добавь значения по умалчанию к формальным параметрам конструктора и инициализация получится по форме очень похожа на агрегатную:

http://coliru.stacked-crooked.com/a/907b00964ddf04ef

#include <iostream>

struct Test
{
    int i1;
    int i2;

protected:    

    int i3;

public:

    Test(int i1 = {}, int i2 = {}, int i3 = {}) : i1(i1), i2(i2), i3(i3) {}

    int getI3() const { return i3; }
    void setI3( int vi3 ) { i3 = vi3; }
};

int main()
{
    Test x;
    Test y{1};
    Test z{1, 2};


    Test t{ 1, 2, 3 };
    //Test t = { 1, 2, 3 };

    std::cout << t.i1 << ", " << t.i2 << "\n";
}