Класс Rectangle с тремя конструкторами

0

Мне нужно заполнить класс 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?!

  • 1
    Вы только что показали декларацию, которая, кажется, в порядке. Но ваша реализация может быть ужасно неправильно. Кроме того, почему вы сохраняете размеры по указателю вместо простых float с float ? (Полагаю, это какая-то придуманная идея домашнего задания, а не ваша вина)
  • 0
    @Zeta На самом деле, это уверенность в том , что реализация ужасно неправильно. Как вы уже заметили, мы можем увидеть это из объявления переменной члена.
Показать ещё 1 комментарий
Теги:

2 ответа

0

Я думаю, что вы ошибаетесь, потому что определение

Rectangle r2(4.5,2.3);

не имеет соответствующего конструктора. Также учтите, что класс в присваивании называется Rectangle, а не прямоугольником. :)

Я думаю, что вместо длины и ширины (почему вы объявили их как указатели?!) вы должны определить четыре элемента данных, которые будут обозначать четыре точки прямоугольника.

  • 1
    rectangle::rectangle(double w, double l) , присмотритесь ко второму main ;).
  • 0
    Судя по функциям-членам, четыре точки не усложняют работу. Также есть два класса Rectangle (возможно, при условии) и rectangle (который, кажется, реализован op).
0

Объявление и использование трех конструкторов (конструктор по умолчанию, пользовательский конструктор и конструктор копирования) выглядят разумно. Однако сохранение указателей на 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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню