Я студент университета и пытаюсь выполнить упражнение C ++, данное мне профессором. Я извиняюсь за мой английский sh. Короче говоря, мне нужно управлять определенным количеством объектов (одного типа) без использования массивов, а только с помощью указателей. Рассматриваемые объекты являются объектами типа «Дом».
Я создаю указатель на «Дом» и с помощью oop указываю указатель на новый объект типа «Дом», инициализированный переменными, введенными пользователь. Затем я перемещаю указатель и начинаю снова.
House* housePtr;
cout<<"We start building houses, you will have to build 4.\n";
for (auto i=0; i<4; ++i, ++housePtr)
{
int r, d;
cout<<"\nLet's build the number "<<i+1<<endl;
cout<<"How many rooms must it have?\n";
cin>>r;
cout<<"\nHow far is it from the center?\n";
cin>>d;
housePtr= new House(r, d);
}
Проблема возникает, когда я прокручиваю объекты, на которые указатель указал. Например, чтобы напечатать значения, которыми обладают созданные мной объекты.
Предыдущее значение для l oop оставляет указатель на позицию рядом с последним созданным объектом. Таким образом, с помощью для l oop я возвращаю указатель на первый объект (поэтому я делаю его go 4 шага назад), и на каждой итерации я заставляю его печатать адрес памяти, удерживаемый указателем, то есть память адрес каждого дома.
for (auto i=0; i<4; i++, housePtr--)
{
cout<<endl<<housePtr<<endl;
}
И это вывод этого последнего фрагмента кода:
0x10139c
0x101390
0x101384
0x101378
Первый - это адрес, который не имеет ничего общего с объектами, потому что он тот, который присущ позиции после последнего объекта. Другие 3 следующие (согласно моей логике c) адреса четвертого, третьего и второго домов соответственно.
Снова взяв указатель, для каждого объекта я напечатал его значения, а также адрес
for (auto i=0; i<4; housePtr++, i++)
{
cout<<"\nThe house "<<i+1<<" has "<<housePtr->getNumOfRooms()<<" rooms and is ";
cout<<housePtr->getDistanceFromCenter()<<" meters from the center\n";
cout<<housePtr<<endl;
}
И это вывод:
The house 1 has 190607135 rooms and is 201338508 meters from the center
0x10136c
The house 2 has 7 rooms and is 4 meters from the center
0x101378
The house 3 has 190607135 rooms and is 201338508 meters from the center
0x101384
The house 4 has 5 rooms and is 8 meters from the center
0x101390
Начальные вводимые мной значения:
We start building houses, you will have to build 4.
Let's build the number 1
How many rooms must it have?
8
How far is it from the center?
7
Let's build the number 2
How many rooms must it have?
5
How far is it from the center?
8
Let's build the number 3
How many rooms must it have?
7
How far is it from the center?
4
Let's build the number 4
How many rooms must it have?
5
How far is it from the center?
8
Я не могу понять, почему он не печатает данные правильно и по какой причине на одной итерации он печатает данные объекта, а на следующей - случайные числа.
В чем проблема?