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
» 2017-04-05 21:57:18
za wcześniejsze przepraszam, telefon świruje przy kopiowaniu

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-159836
michal11
» 2017-04-05 22:16:50
C/C++
Point & m_LeftUp;
    Point & m_RightDown;
public:
    Rectangle( Point leftUp, Point rightDown )
       
    :( m_LeftUp( leftUp ), m_RightDown( rightDown ) )    
{ }

zapisujesz tutaj referencję do zmiennych tymczasowych, nic dziwnego, że możesz dostawać jakieś śmieci, odwoływanie się do takich tymczasowych obiektów jest źródłem problemów.
P-159839
andrzejek97
Temat założony przez niniejszego użytkownika
» 2017-04-05 22:26:43
okej, po prostu, bardzo dziękuję za pomoc ;)
C/C++
Point m_LeftUp;
Point m_RightDown;
P-159841
mokrowski
» 2017-04-05 23:09:53
Jeszcze kilka poprawek związanych z konwencjami, bezpiecznym wywołaniem i niepotrzebnymi kopiami obiektów:
C/C++
#include <iostream>
#include <cmath>

using namespace std;

class Point {
public:
    Point( float x, float y ) {
        this->x = x;
        this->y = y;
    }
    float zwrocX() const {
        return x;
    }
    float zwrocY() const {
        return y;
    }
private:
    float x, y;
};

class Rectangle {
public:
    Rectangle( const Point & leftUp, const Point & rightDown )
        : m_LeftUp( leftUp )
         , m_RightDown( rightDown )
    { }
   
    float getArea() const {
        return abs(( m_LeftUp.zwrocX() - m_RightDown.zwrocX() ) *
        ( m_LeftUp.zwrocY() - m_RightDown.zwrocY() ) );
    }
private:
    Point m_LeftUp;
    Point m_RightDown;
};

class Squere
    : public Rectangle
{
public:
    Squere( const Point & leftUp, const Point & rightDown )
        : Rectangle( leftUp, rightDown )
    { }
    Squere( const 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() << '\n';
}
P-159853
andrzejek97
Temat założony przez niniejszego użytkownika
» 2017-04-06 12:27:51
Bardzo dziękuję za pomoc i cierpliwość ;)
P-159875
1 « 2 »
Poprzednia strona Strona 2 z 2