Основная проблема заключается в создании динамического класса. Что я сделал:
ptr = new animal[2];
Я пытаюсь создать динамический массив размера 2, на который указывает указатель ptr.
Проблема возникает, когда я пытаюсь выполнить следующие операции:
ptr[0].setspeed(9);
ptr++->setspeed(13);
Я использую отладчик DDD (графический интерфейс gdb), и когда я отображаю ptr, я вижу только указатель на один объект. Когда я пытаюсь установить скорость, первый, кажется, работает, а второй - нет (скорость по умолчанию равна 0). Печать только мусор.
Я не совсем уверен, что происходит, пожалуйста, помогите.
Также, когда я делаю:
ptr->print();
Предполагается, что он будет печататься как для ptr[0]
, так и для ptr[1]
, или просто для ptr[0]
?
Кроме того, может ли кто-нибудь быстро нарисовать картину того, как ptr
и новый динамический класс выглядят? На мой взгляд, это ptr, указывающий на массив, размер массива два, у каждого есть объект животного.
#include <iostream>
using namespace std;
class animal
{
private:
int speed;
double position_x;
double position_y;
public:
animal() : speed(0), position_x(0), position_y(0)
{
}
animal (int v, double x, double y)
{
this->speed = v;
this->position_x = x;
this->position_y = y;
}
animal(const animal & g)
{
this->speed = g.speed;
this->position_x = g.position_x;
this->position_y = g.position_y;
}
~animal();
void print();
int getspeed() { return this->speed; }
int getx() { return this->position_x; }
int gety() { return this->position_y; }
void setspeed(int s) { this->speed = s; }
};
void animal::print()
{
cout << "speed: " << this->getspeed() << endl;
cout << "position_x: " << this->getx() << endl;
cout << "position_y: " << this->gety() << endl;
}
int main()
{
animal *ptr;
ptr = new animal;
ptr = new animal [2];
ptr[0].setspeed(9);
ptr++->setspeed(13);
ptr->print();
cout << ptr[0].getspeed() << endl;
cout << ptr[1].getspeed();
return 0;
}