Проверка переменной класса в цикле

У меня например есть класс

class MyClass
{
public:
    int a;

private:

};

И созданные экземпляры:

void Foo() {
    MyClass a;
    a.a = 5;
    MyClass b;
    b.a = 4;
    MyClass c;
    c.a = 55;
    MyClass d;
    d.a = 54;
}

Как мне в цикле узнать, в каких экземплярах класса a > 5? И вывести ссылку на этот экземпляр

int main()
{
    for (/*Проверка*/)
    {
        if (/*Проверка */ > 5) std::cout << &/*Класс*/;
    }
    return 0;
}

Ответы (1 шт):

Автор решения: AR Hovsepyan

Если объекты создаются в одной функции, а в другой вы хотите иметь доступ к этим объектам, то их (или ссылки), нужно как то хранить. И, конечно, не обязательно хранить в массиве. Вот пример хранения информации(хранимое значение объекта и имя объекта) в строковом потоке:

using Item = std::pair<MyClass, std::string>;

std::ostream& operator<<(
    std::ostream& stream, const Item& info)
{
   stream << info.first.a 
       << '\t' << info.second;
   return  stream;
}

std::stringstream my_ios; 

void Foo() {
    MyClass a;
    a.a = 5;
    MyClass b;
    b.a = 4;
    MyClass c;
    c.a = 55;
    MyClass d;
    d.a = 54;
    
    my_ios << Item{ a, "a" } << ' ' << Item{ b, "b" }
    << ' ' << Item{ c, "c" } << ' ' << Item{ d, "d" };    
}

int main()
{   
    Foo();   
    for (Item  p{}; my_ios >> p.first.a >> p.second;)
    {
        if (p.first.a > 5) 
            std::cout << "value = " << p << " - \"object\"\n";
    }
    return 0;
}
→ Ссылка