andrzejek97 Temat założony przez niniejszego użytkownika |
Dziedziczenie, konstruktor » 2017-04-05 11:28:10 Mam problem z jednym napisaniem poprawnie konstruktora w klasie dziedziczącej, otóż zadanie polegało na napisaniu klasy, która reperezentuje punkt w przestrzeni 2D, w konstruktorze miało zostać użyte słowo kluczowe this, klasa miała mieć metody zwracające wartości poszczególnych współrzędnych, jak również miałem napisać drugą klasę (Rectangle) która liczy pole prostokąta i w konstruktorze ma przyjmować lewy górny i prawy dolny wierzchołek prostokąta, oraz w tej klasie napisać metodę zwracającą pole prostokąta (do tej pory udało mi się zrobić), następnie miałem stworzyć Squere która dziedziczy po klasie Rectangle, i w niej zawrzeć konstruktor analogiczny jak w klasie bazowej, oraz dodatkowy konstruktor dwuargumentowy (pierwszy argument to lewy górny wierzchołek kwadratu, drugi to szerokość) i z tym mam problem, nie wiem jak to zapisać, wklejam kod tego co już zrobiłem #include<iostream> #include<cmath> using namespace std;
class Point { float x, y; public: Point( float x, float y ) { this->x = x; this->y = y; } float zwrocX() { return x; } float zwrocY() { return y; } }; class Rectangle { Point & m_LeftUp; Point & m_RightDown; public: Rectangle( Point & leftUp, Point & rightDown ) : m_LeftUp( leftUp ) , m_RightDown( rightDown ) { } float getArea() { return abs(( m_LeftUp.zwrocX() - m_RightDown.zwrocX() ) *( m_LeftUp.zwroc Y() - m_RightDown.zwrocY() ) ); }; Squere: public Rectangle { Squere( Point leftUp, Point rightDown ) : Rectangle( leftUp, rightDown ) { } int main() { Point pierwszy( 8, 4 ); Point drugi( 0, 0 ); cout << "pierwsza wsolrzedna pierwszego punktu: " << pierwszy.zwrocX() << '\n'; Rectangle prostokat( pierwszy, drugi ); cout << "pole prostokata= " << prostokat.getArea(); return 0; }
|
|
michal11 |
» 2017-04-05 12:13:41 Square( const Point & LeftUp, float SideLength ); implementację zostawiam tobie. |
|
andrzejek97 Temat założony przez niniejszego użytkownika |
» 2017-04-05 18:41:16 Gdy implementuje takie rozwiązanie Squere( Point leftUp, float width ) : Rectangle( leftUp, Point( leftUp.zwrocX() + width, leftUp.zwrocY() + width ) ) { }
to przy liczeniu pola kwadratu wychodzą bardzo dziwne wyniki |
|
michal11 |
» 2017-04-05 20:15:24 Pokaż kod.
Dlaczego punkty trzymasz jako referencje w klasie Rectangle? |
|
andrzejek97 Temat założony przez niniejszego użytkownika |
» 2017-04-05 20:51:36 #include<iostream> #include<cmath> using namespace std;
class Point { float x, y; public: Point( float x, float y ) { this->x = x; this->y = y; } float zwrocX() { return x; } float zwrocY() { return y; } }; class Rectangle { Point & m_LeftUp; Point & m_RightDown; public: Rectangle( Point leftUp, Point rightDown ) : m_LeftUp( leftUp ) , m_RightDown( rightDown ) { } float getArea() { return abs(( m_LeftUp.zwrocX() - m_RightDown.zwrocX() ) *( m_LeftUp.zwrocY() - m_RightDown.zwrocY() ) ); } }; class Squere : public Rectangle { public: Squere( Point leftUp, Point rightDown ) : Rectangle( leftUp, rightDown ) { } Squere( Point leftUp, float width ) : Rectangle( leftUp, Point( leftUp.zwrocX() - width, leftUp.zwrocY() - width ) ) { } };
int main() { Point pierwszy( 4, 4 ); Point drugi( 2, 3 ); cout << "Pierwsza wspolrzedna = " << pierwszy.zwrocX() << '\n'; Rectangle prostokat( pierwszy, drugi ); cout << "Pole prostokata = " << prostokat.getArea(); float szerokosc; cout << "\nPodaj szerokosc kwadratu: "; cin >> szerokosc; Point kwadratpunkt( 1, 1 ); Squere kwadrat( kwadratpunkt, szerokosc ); cout << "Pole kwadratu= " << kwadrat.getArea(); return 0; }
|
|
michal11 |
» 2017-04-05 21:12:42 Sformatuj porządnie post bo tego nie da się czytać. |
|
andrzejek97 Temat założony przez niniejszego użytkownika |
» 2017-04-05 21:15:59 przepraszam, pomyłka, wysyłam ten kod z telefonu, aktualnie nie mam dostępu do internetu na komputerze, już poprawiłem |
|
michal11 |
» 2017-04-05 21:26:25 To ci się kompiluje w ogóle?
U mnie na TDM-GCC 4.9.2 ten kod się nie kompiluje.
Zamień referencje na zwykłe zmienne w składowych klasy Rectangle i powinno być ok. |
|
« 1 » 2 |