Доступ к свойствам динамически созданного класса

Допустим имеем

    class SomeClass
       int property =0;
       SomeClass{}
       void foo()
       {
          cout << this.property;
       }
       ;

    void main()
    {
       int i=0;
       vector<SomeClass*> sc;
       while(condition)
       {
          SomeClass *obj = new SomeClass;
          sc.push_back(obj);
          obj.property = i++;
       }


    sc[3]obj.foo();

    }

что выведет последняя строка и почему?


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

Автор решения: DSuhoi

Мы обращаемся к объекту по указателю на него. Т.е. взаимодействуем непосредственно с памятью, выделенной посредством new. Вывод: 3. Переменная-счётчик i будет инкрементироваться и на четвёртой итерации цикла в поле property четвёртого созданного объекта SomeClass запишет эту цифру. Потом через указатель, сохранённый в векторе sc, запуститься функция вывода этого поля. Пример рабочего кода:

#include <iostream>
#include <vector>

using namespace std;

class SomeClass {
/* Чтобы можно было обращаться напрямую
 *  к полям класса стоит указать модификатор доступа */
public:
    int property =0;
    SomeClass(){}
    void foo()
    {
    cout << this->property;
    }
};

int main()
{
    int i=0;
    vector<SomeClass*> sc;
    // Пусть будет 10 элементов...
    while(i<10){
        // Выделяем память под объект
        SomeClass *obj = new SomeClass;
        // Отправляем указатель на него в вектор
        sc.push_back(obj);
        // Изменяем сам объект в памяти по указателю на него
        obj->property = i++;
    }
    
    sc[3]->foo();
    
    return 0;
}
→ Ссылка