Есть ли способ в C ++ для создания объекта, указав каждую переменную-член в списке? - PullRequest
0 голосов
/ 30 октября 2019

Я помню, что в колледже был способ инициализировать объект, записывающий серию инициализаций переменных-членов, разделенных запятыми, как в примере кода ниже, но я не могу вспомнить, как он назывался.

class A
{
public:
    string s1, s2, s3;
    A()
    {

    }
};
#include "A.h"

int main()
{
    A a
    {
        s1 = "String1",
        s2 = "String 2",
        s3 ="String 3"
    }
}

Что еще я должен набрать, чтобы этот конструктор, такой как list, работал?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Не в C ++, но C99 поддерживает это (назначенные инициализаторы).

struct point { int x, y; };

struct point p = { .y = yvalue, .x = xvalue };

https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html

1 голос
/ 30 октября 2019

Ваш код с правильным конструктором:

class A
{
    public:
    string s1, s2, s3;
    A(string a, string b, string c): s1{a},s2{b},s3{c}
    {

    }
};

Теперь вы можете инициализировать объекты этого класса следующим образом:

A a("String1","String2","String3");

Если вам интересно, вы можете обратиться сюда: https://en.cppreference.com/w/cpp/language/initializer_list

Если вы хотите именованные аргументы, ну, C ++ не имеет именованных аргументов, вот предложение, которое может быть реализовано в будущем (это не в C ++ 17): http://www.open -std.org / jtc1 / sc22 / wg21 / docs / paper / 2014 / n4172.htm

Если вы все еще хотите именованные аргументы, вот статья FluentCpp о том, как заставить ее работать: https://www.fluentcpp.com/2018/12/14/named-arguments-cpp/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...