Основная проблема заключается в создании динамического класса. Что я сделал:Классы и указатели, как они работают?
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;
}
Наилучшая помощь: вкрутите динамические массивы, получите «std :: vector». – Xeo
спасибо, но я хочу понять это (я имею в виду, что я действительно хочу это понять), вот почему я это делаю. Я буду смотреть в «вектор» благодаря – Rave
«ptr = новое животное; ptr = новое животное [2];» Возможно, это просто опечатка, но это утечка памяти. – Duck