Мне нужно заполнить класс Rectangle. Напишите 3 конструктора и деструктор для удовлетворения основного() ниже. Используйте инициализаторы конструктора для каждого конструктора. Вот что делается:
class Rectangle
{
float* length;
float* width;
...
???
...
};
int main()
{
Rectangle r1;
Rectangle r2(4.5,2.3);
Rectangle r3(r2);
}
Вот как я заполнил класс прямоугольников:
class rectangle
{
private:
float* length;
float* width;
public:
rectangle(); //default constructor
rectangle(double w, double l); //constructor with parameters
rectangle(const rectangle&); //copy constructor
~rectangle(void);
double getWidth(void);
double getLength(void);
double perimeter(void) const;
double area(void) const;
};
...........
...........
...........
int main()
{
rectangle r1;
rectangle r2(4.5,2.3);
rectangle r3(r2);
//statements
}
Я просто хочу знать, правильно ли это или неправильно. Может ли кто-нибудь увидеть, не пропал ли что-либо или что-то добавить в класс rectanglr?!
Я думаю, что вы ошибаетесь, потому что определение
Rectangle r2(4.5,2.3);
не имеет соответствующего конструктора. Также учтите, что класс в присваивании называется Rectangle, а не прямоугольником. :)
Я думаю, что вместо длины и ширины (почему вы объявили их как указатели?!) вы должны определить четыре элемента данных, которые будут обозначать четыре точки прямоугольника.
rectangle::rectangle(double w, double l)
, присмотритесь ко второму main
;).
Объявление и использование трех конструкторов (конструктор по умолчанию, пользовательский конструктор и конструктор копирования) выглядят разумно. Однако сохранение указателей на float
не выглядит разумным: вы должны просто хранить float
(я бы фактически сохранил double
если у меня не было оснований предполагать, что существует огромное крепление rectangle
s). При хранении float
s на самом деле нет необходимости иметь конструктор копирования или деструктор. Если вы настаиваете на сохранении float*
и, таким образом, выделяете память, вы также должны выполнить назначение копии:
rectangle& rectangle::operator= (rectangle other) {
other.swap(*this);
return *this;
}
void rectangle::swap(rectangle& other) {
std::swap(this->length, other.length);
std::swap(this->width, other.width);
}
float
сfloat
? (Полагаю, это какая-то придуманная идея домашнего задания, а не ваша вина)