Agregacja - figury

0

Witam!
Mam za zadanie napisać zestaw klas reprezentujących punkty i figury w przestrzeni 2d i 3d.
Figury musza przyjmować zwykłe współrzędne punktów, ale także utworzone punkty. A figury przestrzenne mają przyjmować w parametrze również obiekty reprezentujące punkty oraz figury płaskie. Do tg należy użyć agregacji.
Np.
Punkt x = new Punkt (1,1)
Punkt y = new Punkt (2,2)
Prostokat p1 = new Prostokat (x,y);
Prostokat p2 = new Prostokat (1,1,2,2);
p1.pole() -> „1”
Punkt z = new Punkt(1,1,1)
Prostopadloscian pp1 = new Prostopadloscian (p1,z)
Prostopadloscian pp2 = new Prostopadloscian (x,y,z)
Prostopadloscian pp3 = new Prostopadloscian (1,1,0,2,2,0,1,1,1)

Moje pytanie brzmi jak w c++ użyć agregacji?
Czy do każdego przypadku jest potrzebny oddzielny konstruktor?
Jak ogólnie powinny wyglądać klasy: punkt, prostokat oraz prostopadloscian?
Dzięki za odpowiedzi i przepraszam jeśli zadaje głupie pytania :)

0

Zacznijmy od klasy Punkt. Jak myślisz, jakie dane powinien przechowywać obiekt tej klasy?

0

wspołrzędne x i y, tak mi sie wydaje ;) ale czy dla prostopadłościanu który ma 8 punktów, trzeba zrobić przypadki kiedy podajemy punktu ręcznie, kiedy podajemy obiekt figury płaskiej jako punkty, kiedy podajemy obiekty Punkt oraz przypadki pośrednie?

1

I tu się zaczyna. Bo "punkt" a "punkt" to niekoniecznie to samo. :P Punkt2d będzie miał x i y, ale już Punkt3d będzie miał x, y, i z. :P

Przykład kompozycji:

struct Point {
    double x, y;
};
struct Rectangle {
    Point a, b; //zależnie od potrzeb: c,d - wszystko zależy od założeń.
}

Kompozycja to niekoniecznie to samo co agregacja - podejrzewam, że jednak chodzi Ci o to pierwsze, bo agregacja może wyglądać też tak:

struct Engine { };
struct Car {
    Engine* motor;
}
//albo
struct Person { };
struct Book { };
struct LoanRecord {
  Person* p;
  Book* b;
};

Różnica między pierwszym a drugim przykładem jest taka, że kompozycja oznacza, że obiekt złożony jest z innych obiektów, które posiada, oraz które zostaną zniszczone razem z nim. Agregacja jest szerszym pojęciem - obiekt składa się z innych obiektów, ale niekoniecznie je posiada, a co za tym idzie - możliwe jest, że kiedy jest on niszczony, te inne obiekty mogą sobie szczęśliwie żyć dalej.

Co do konstruktorów - jeżeli masz takie wymagania, że masz mieć konstruktor prostopadłościanu gdzie podajesz osiem punktów, to taki zrób (pamiętaj, żeby sprawdzić, czy te punkty w ogóle tworzą prostopadłościan!). W każdym razie konstruktor przyjmujący osiem punktów to osobna rzecz od konstruktora przyjmującego dwa prostokąty.

Pomyśl co powinien mieć jako dane Prostopadłościan. Punkty? A może jeden prostokąt i wektor przesunięcia? (I jaki wektor? :) )

0

Właśnie tak jest podane w przykładzie:
Prostopadloscian pp1 = new Prostopadloscian (p1,z)
Prostopadloscian pp2 = new Prostopadloscian (x,y,z)
Prostopadloscian pp3 = new Prostopadloscian (1,1,0,2,2,0,1,1,1)
i musze się chyba z tym pomęczyć ;) dzięki ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1