Доступ к свойствам динамически созданного класса
Допустим имеем
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;
}