1

Тема: Класи та о'бєкти

Допоможіть із задачею! Нічого не виходить, зовсім... Будь-ласка..

Клас Box (коробка). Клас має атрибути length (довжина), wіdth (ширина) і height (висота), кожний з яких за замовчуванням дорівнює 1. Він має функції запису та читання для атрибутів. Функції запису повинні перевіряти, що атрибути – числа з плаваючою крапкою, що знаходяться в межах від 0.0 до 20.0. Він має функції-елементи, що обчислюють об’єм та площу поверхні, а також три функції для визначення обхвату коробки.

2

Re: Класи та о'бєкти

Eldar написав:

Допоможіть із задачею! Нічого не виходить, зовсім... Будь-ласка..

зовсім нічого? навіть класс створити з атрибутами? навіть перевірити діапазаон і тип числа?

3

Re: Класи та о'бєкти

А ви потренуйтесь на простіших задачах. Створіть клас "прямокутник", і функцію для обчислення площі. Потім периметру.

А потім узагальнити на тривимірний випадок буде вже легше.

4

Re: Класи та о'бєкти

А ви потренуйтесь на простіших задачах. Створіть клас "прямокутник", і функцію для обчислення площі. Потім периметру.
А потім узагальнити на тривимірний випадок буде вже легше.

Із двовимірними в мене все ок.. А тут казус якийсь.

5

Re: Класи та о'бєкти

Який казус? Не компілиться?

6

Re: Класи та о'бєкти

bunyk написав:

Не компілиться?

Так. Кому не важко, напишіть код, а я вже по ньому навчусь.

7

Re: Класи та о'бєкти

які помилки при компілюванні?

8

Re: Класи та о'бєкти

Дивно що з двовимірними ок, а тривимірні не компіляться. Там всього лише на один атрибут і на одне множення більше. А які рядки ви додаєте що воно перестає компілюватись?

9

Re: Класи та о'бєкти

Eldar написав:
bunyk написав:

Не компілиться?

Так. Кому не важко, напишіть код, а я вже по ньому навчусь.

Покажіть код. Може, ви десь крапкому пропустили, а компілятор сприйняв це близько до серця. :)

З.І: як мінімум першу половину задачі ви мали зробити: там і математика не потрібна.

10 Востаннє редагувалося Eldar (28.02.2013 14:57:21)

Re: Класи та о'бєкти

Покажіть код.

Так, звичайно. Ось:

Заголовочний файл для Box класу:

Код
class Box  
{
private:
    double length;
    double width;
    double higth;
public:
    //конструктор по замовчуванню
    Box(double l = 1, double w = 1, double h = 1);
    // конструктор копіювання
    Box(const Box & rect);
    // деструктор
    virtual ~Box();

    double GetLength();
    double GetWidth();
    double GetHigth();
    void  PutLength(double);
    void  PutWidth(double);
    void PutHigth(double);

    double Volume();
    double Square();
    double Girthwidth();
    double Girthhigth();
};

Реалізація Box класу:

Код
#include "Box.h"

Box::Box(double l, double w, double h)
{
    length = l;
    width = w;
    higth = h;
}

Box::Box(const Box & rect)
{
    *this = rect;
}

Box::~Box()
{
}

double Box::GetLength()
{
    return length;
}

double Box::GetWidth()
{
    return width;
}

double Box::GetHigth()
{
    return higth;
}

void  Box::PutLength(double l)
{
    length = l;
}

void  Box::PutWidth(double w)
{
    width = w;
}

void Box::PutHigth(double h)
{
    higth = h;
}

double Box::Volume() //вираховуємо об'єм
{
    return (width * length) * higth;
}

double Box::Square()//вираховуємо площу
{
    return 2.0 * (width * length) + ((2 * length) + (2 * width) * higth);
}

double Box::Girthwidth()//обхват по ширині
{
    return (2 * width) + (2 * length);
}

double Box::Girthhigth()//обхват по висоті
{
    return (2 * higth) + (2 * length);
}

Головна функція

Код
#include <iostream>
#include "Box.h"
using namespace std;

int main()
{
    Box rec1;   
    cout << "rec1" << endl;
    cout << "\tlength =" << rec1.GetLength()<< endl;
    cout << "\twidth ="  << rec1.GetWidth() << endl;
    cout << "\thigth = " << rec1.GetHigth() << endl;
    cout << "volume = " << rec1.Volume() << endl;

    Box rec2(10,10,21);
    cout << "rec2" << endl;
    cout << "\tlength = " << rec2.GetLength() << endl;
    cout << "\twidth = " << rec2.GetWidth() << endl;
    cout << "\thigth = " << rec2.GetHigth() << endl;
    cout << "volume = " << rec2.Volume() << endl;
    
    Box rec5(rec2);
    cout << "rec5" << endl;
    cout << "\tlength = " << rec5.GetLength() << endl;
    cout << "\twidth = " << rec5.GetWidth() << endl;
    cout << "\thigth = " << rec5.GetHigth() << endl;
    cout << "volume = " << rec5.Volume() << endl;
    
    Box rec6;
    rec6 = Box(6,3,5);
    cout << "rec6" << endl;
    cout << "\tlength = " << rec6.GetLength() << endl;
    cout << "\twidth = " << rec6.GetWidth() << endl;
    cout << "\thigth = " << rec6.GetHigth() << endl;
    cout << "volume = " << rec6.Volume() << endl;
    
    Box* rec7;
    rec7 = new Box(2, 2, 2);
    cout << "rec6" << endl;
    cout << "\tlength = " << rec7->GetLength() << endl;
    cout << "\twidth = " << rec7->GetWidth() << endl;
    cout << "\thigth = " << rec7->GetHigth() << endl;
    cout << "square = " << rec7->Square() << endl;
    delete rec7;
    
    Box & rec8 = rec1;
    cout << "rec8" << endl;
    cout << "\tlength = " << rec8.GetLength() << endl;
    cout << "\twidth = " << rec8.GetWidth() << endl;
    cout << "\thigth = " << rec8.GetHigth() << endl;
    cout << "square = " << rec8.Square() << endl;

    Box rec9(rec2);
    cout << "rec9" << endl;
    cout << "\tlength = " << rec9.GetLength() << endl;
    cout << "\twidth = " << rec9.GetWidth() << endl;
    cout << "\thigth = " << rec9.GetHigth() << endl;
    cout << "girth width = " << rec9.Girthwidth() << endl;
    
    Box rec10;
    cout << "rec10" << endl;
    cout << "\tlength = " << rec10.GetLength() << endl;
    cout << "\twidth = " << rec10.GetWidth() << endl;
    cout << "\thigth = " << rec10.GetHigth() << endl;
    cout << "girth higth = " << rec10.Girthhigth() << endl;
    
    return 0;
}

Тепер я переробив його і все ок. Але не знаю як мені поставити умову, що числа знаходяться в межах від 0 до 20 і в задачі сказано, що має бути три функції для визначення обхвату короюки, дві я написав (по висоті і по ширині), а яка тоді третя?

11

Re: Класи та о'бєкти

void  Box::PutLength(double l)
{
    length = l;
}

замінити на

void  Box::PutLength(double l)
{
    if(l >=0 && l <= 20)
        length = l;
}

і аналогічно для інших двох вимірів.

Якщо я вірно зрозумів, "обхват" тут - це периметр грані. Себто третя функція буде

double Box::Girth3()
{
    return (2 * width) + (2 * higth);
}

З.І: і плюс вам у карму за оформлення коду. :)