Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dziedziczenie, konstruktor

Ostatnio zmodyfikowano 2017-04-06 12:27
Autor Wiadomość
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
C/C++
#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 )
        { } //analogiczny
        // tu powinienem byc drugi, dwuargumentowy konstruktor
        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;
        }
P-159791
michal11
» 2017-04-05 12:13:41
Square( const Point & LeftUp, float SideLength );

implementację zostawiam tobie.
P-159799
andrzejek97
Temat założony przez niniejszego użytkownika
» 2017-04-05 18:41:16
Gdy implementuje takie rozwiązanie
C/C++
Squere( Point leftUp, float width )
    : Rectangle( leftUp, Point( leftUp.zwrocX() + width, leftUp.zwrocY() + width ) )
{ }
 to przy liczeniu pola kwadratu wychodzą bardzo dziwne wyniki
P-159813
michal11
» 2017-04-05 20:15:24
Pokaż kod.

Dlaczego punkty trzymasz jako referencje w klasie Rectangle?
P-159822
andrzejek97
Temat założony przez niniejszego użytkownika
» 2017-04-05 20:51:36
C/C++
#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;
}
P-159823
michal11
» 2017-04-05 21:12:42
Sformatuj porządnie post bo tego nie da się czytać.
P-159827
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
P-159829
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.
P-159831
« 1 » 2
  Strona 1 z 2 Następna strona