Program pozwalający na obliczenie pola powierzchni i obwodu - problem z funkcjami

0

Napisałem program obliczający pole i obwód prostokąta. W programie potrzebuję używać pól statycznych (zalecenie nauczyciela) a cały program musi zostać napisany obiektowo. Program wypisuje poprawnie takie wartości jak: dane właściciela, długość, szerokość i ID - problem jednak leży w obliczaniu pola i obwodu, ponieważ zwraca on w tym przypadku wartość 1 (zarówno dla pola jak i obwodu) gdy uruchamiam program (prawdopodobnie w ogóle nie "wchodzi do funkcji").

Oto mój kod:

#include <iostream>

using namespace std;

class dzialkadane
{
    public:
    float dlugosc;
    float szerokosc;
    float pole;
    float obwod;
    int id;
    static string wlasciciel;
    void obl_pole(float&,float&);
    void obl_obwod(float&,float&);
    void dane(string& ,float&, float&, float&, float& ,int&);

};

string dzialkadane::wlasciciel = "WLASCICIEL XYZ";



void dzialkadane::obl_pole(float &dlugosc,float &szerokosc)
{
    pole=dlugosc*szerokosc;
}

void dzialkadane::obl_obwod(float &dlugosc,float &szerokosc)
{
    obwod=(2*dlugosc)+(2*szerokosc);
}

void dzialkadane::dane(string &wlascicieldzialki ,float &dlugoscdz, float &szerokoscdz, float &poledz, float &obwoddz, int &iddz) {

	wlascicieldzialki = wlasciciel;
	dlugoscdz = dlugosc;
	szerokoscdz = szerokosc;
	poledz = pole;
	iddz = id;
    obwoddz = obwod;
}

int main()
{
    dzialkadane dane1;

    cout<<"Wpisz dlugosc dzialki: ";
    cin >> dane1.dlugosc;

    cout<<"Wpisz szerokosc dzialki: ";
    cin >> dane1.szerokosc;

    cout<<"Wpisz id dzialki: ";
    cin >> dane1.id;


	cout << "Dane pracownika: " << endl;
	cout << "Nazwa wlasciciela: " << dzialkadane::wlasciciel <<endl;
	cout << "Dlugosc: " << dane1.dlugosc << endl;
	cout << "Szerokosc: " << dane1.szerokosc << endl;
	cout << "Id: "<< dane1.id <<endl;
	cout << "Pole: "<<dzialkadane::obl_pole<<endl;
	cout << "Obwod: "<<dzialkadane::obl_obwod<<endl;

    return 0;
}

Czy ktoś ma jakiś pomysł, jak to rozwiązać? Z góry dziękuję za pomoc.

3

Wszelkie zadania typu "masz użyć X" niewiele uczą, a wręcz bywają szkodliwe.
Wymuszanie użycia pól statycznych jest tego "dobrym" przykładem.

Pola statyczne określają właściwości klasy, a wlasciciel nie pasuje do tego. Szczerze nie mam pojęcia co mogłoby pełnić taką role dla klasy dzialkadane.
Przykład sensownego pola statycznego, to licznik instancji obiektów danej klasy.

4
#include <iostream>

using namespace std;

class dzialkadane
{
    private:
    static int lastid;
    public:
    float dlugosc;
    float szerokosc;
    int id;
    string wlasciciel;
    int getid() const;
    float pole() const;
    float obwod() const;
    dzialkadane(const string &wlasciciel);
};

int dzialkadane::lastid=0;

int dzialkadane::getid() const
{
  return id;
}

float dzialkadane::pole() const
{
    return dlugosc*szerokosc;
}

float dzialkadane::obwod() const
{
    return (2*dlugosc)+(2*szerokosc);
}

dzialkadane::dzialkadane(const string &wlasciciel):wlasciciel(wlasciciel),id(++lastid)
{
}

int main()
{
    dzialkadane dane1("WLASCICIEL XYZ");

    cout<<"Wpisz dlugosc dzialki: ";
    cin >> dane1.dlugosc;

    cout<<"Wpisz szerokosc dzialki: ";
    cin >> dane1.szerokosc;

    cout << "Dane pracownika: " << endl;
    cout << "Nazwa wlasciciela: " << dane1.wlasciciel <<endl;
    cout << "Dlugosc: " << dane1.dlugosc << endl;
    cout << "Szerokosc: " << dane1.szerokosc << endl;
    cout << "Id: "<< dane1.getid() <<endl;
    cout << "Pole: "<<dane1.pole()<<endl;
    cout << "Obwod: "<<dane1.obwod()<<endl;
    return 0;
}

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