Добрый день! Подскажите, пожалуйста, как в С++ самым рациональным способом сделать массив из объектов одного типа, чтобы затем вызывать (работать) однотипно с одинаковыми методами объекта:
Здравствуйте, emergen, Вы писали:
E>Добрый день! Подскажите, пожалуйста, как в С++ самым рациональным способом сделать массив из объектов одного типа, чтобы затем вызывать (работать) однотипно с одинаковыми методами объекта:
E>...
E>obj1 = MyObject(); E>obj2 = MyObject(); E>obj3 = MyObject();
E>...
E>for(i=0; i<3; i++) E>{
E>obj[i].SetFlag();
E>}
E>В языке программирования Python данная конструкция выглядит следующим образом:
E> for obj in [obj1, obj2, obj3]: E> obj.SetFlag()
E>А как такое сделать в С++?
используя с с++11 так
std::array<MyObject, 3> a = {MyObject(), MyObject(), MyObject()};
for(const auto& e: a)
e.SetFlag();
Здравствуйте, kvser, Вы писали:
K>Здравствуйте, emergen, Вы писали:
E>>Добрый день! Подскажите, пожалуйста, как в С++ самым рациональным способом сделать массив из объектов одного типа, чтобы затем вызывать (работать) однотипно с одинаковыми методами объекта:
E>>...
E>>obj1 = MyObject(); E>>obj2 = MyObject(); E>>obj3 = MyObject();
E>>...
E>>for(i=0; i<3; i++) E>>{
E>>obj[i].SetFlag();
E>>}
E>>В языке программирования Python данная конструкция выглядит следующим образом:
E>> for obj in [obj1, obj2, obj3]: E>> obj.SetFlag()
E>>А как такое сделать в С++?
K>используя с с++11 так K>
K>std::array<MyObject, 3> a = {MyObject(), MyObject(), MyObject()};
K>for(const auto& e: a)
K> e.SetFlag();
K>
в данном случае на протяжении всей программы после этого цикла нужно будет обращаться к данным объектам как
std::array[0].setFlag(); //это первый элемент массива
std::array[1].setFlag(); //это второй элемент массива
std::array[3].setFlag(); //это третий элемент массива
а как сделать так чтобы обращаться по их названию? типа:
obj1.setFlag(); //это первый элемент массива
obj2.setFlag(); //это второй элемент массива
obj3.setFlag(); //это третий элемент массива
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, emergen, Вы писали:
E>>А вот сразу в одной конструкции это учесть можно как то?
J>У тебя что первично-то — объекты obj1-3 или массив?
первично создаются экземпляры объектов
obj1 = new MyObject();
obj2 = new MyObject();
obj3 = new MyObject();
Массив объектов необходим чтобы выполнить одинаковые вызовы методов.
Здравствуйте, emergen, Вы писали:
E>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, emergen, Вы писали:
E>>>А вот сразу в одной конструкции это учесть можно как то?
J>>У тебя что первично-то — объекты obj1-3 или массив?
E>первично создаются экземпляры объектов
E>obj1 = new MyObject();
E>obj2 = new MyObject();
E>obj3 = new MyObject();
E>Массив объектов необходим чтобы выполнить одинаковые вызовы методов.
Будет ли такой код работать?
MyObject *obj1, *obj2, *obj3;
obj1 = new MyObject();
obj2 = new MyObject();
obj3 = new MyObject();
std::array< MyObject&, 3> a = { obj1, obj2, obj3 };
Здравствуйте, emergen, Вы писали:
E>В языке программирования Python данная конструкция выглядит следующим образом: E> for obj in [obj1, obj2, obj3]: E> obj.SetFlag() E>А как такое сделать в С++?
Здравствуйте, emergen, Вы писали:
E>Здравствуйте, emergen, Вы писали:
E>>Здравствуйте, jazzer, Вы писали:
J>>>Здравствуйте, emergen, Вы писали:
E>>>>А вот сразу в одной конструкции это учесть можно как то?
J>>>У тебя что первично-то — объекты obj1-3 или массив?
E>>первично создаются экземпляры объектов
E>>obj1 = new MyObject();
E>>obj2 = new MyObject();
E>>obj3 = new MyObject();
E>>Массив объектов необходим чтобы выполнить одинаковые вызовы методов.
E>Будет ли такой код работать?
E>MyObject *obj1, *obj2, *obj3;
E>obj1 = new MyObject();
E>obj2 = new MyObject();
E>obj3 = new MyObject();