maly problem z klasami

0

witam

nie wiem czy to nie zbyt powazne forum na moj problem jednak zawsze warto sprobowac.

tak wiec mam do napisania programi ktory ma za zadanie sczytac wspolrzedne 2 punktow, nastepnie zrobic z nich odcinek i obliczyc dlugosc tego odcinka. nastepnie uzywajac tych odcinkow zbudowac kwadrat i obliczyc pole i obwod tego kwadratu. w sumie to zatrzymalem sie juz na koncowce a przynajmniej tak mi sie wydaje. problem polega na tym ze funckja obow i pole zwracaja mi 0...

oto moje wypociny:

#include <cstdlib>
#include <iostream>
#include<math.h>

using namespace std;

class Punkt
{
      float x,y,z;
      public:
             Punkt(){x=0; y=0; z=0;}
             Punkt(float a, float b, float c)
             {
                       x=a;
                       y=b;
                       z=c;
             }
             float Odleglosc(Punkt p);
             void Pobierz_wspolrzedne(){cin>>x>>y>>z;}
             ~Punkt(){;}             
};
class Odcinek:public Punkt
{
      Punkt poczatkowy, koncowy;
      public:
             Odcinek(){poczatkowy, koncowy;}
             Odcinek(Punkt p1, Punkt p2)
             {
                           poczatkowy = p1;
                           koncowy = p2;
             }
             float Dlugosc();
};
class Kwadrat:public Odcinek
{
      Odcinek pierwszy,drugi,trzeci,czwarty;
      public:
             Kwadrat(){pierwszy, drugi, trzeci, czwarty;}
             Kwadrat(Odcinek a1, Odcinek a2, Odcinek a3, Odcinek a4)
             {
                             pierwszy = a1;
                             drugi = a2;
                             trzeci = a3;
                             czwarty = a4;
             }
             float Obwod();
             float Pole();
};
float Punkt::Odleglosc(Punkt p)
{
        return sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y)+(p.z-z)*(p.z-z));
}
float Odcinek::Dlugosc()
{
    return poczatkowy.Odleglosc(koncowy);
}
float Kwadrat::Obwod()
{
      float bok = Dlugosc();
      return 4*bok;
}
float Kwadrat::Pole()
{
      float bok = Dlugosc();
      return Dlugosc()*Dlugosc();
}
int main()
{
    Punkt *p1, *p2;
    Odcinek *a1, *a2, *a3, *a4;
    Kwadrat *k1;
    p1=new Punkt();
    p2=new Punkt();
    cout<<"wspolrzedne punktu pierwszego: "<<endl;
    p1->Pobierz_wspolrzedne();
    cout<<"wspolrzedne punktu drugiego: "<<endl;
    p2->Pobierz_wspolrzedne();
    a1 = new Odcinek(*p1, *p2);
    a2 = new Odcinek(*p1, *p2);
    a3 = new Odcinek(*p1, *p2);
    a4 = new Odcinek(*p1, *p2);
    cout<<"dlugosc boku 1 "<<a1->Dlugosc()<<endl;
    cout<<"dlugosc boku 2 "<<a2->Dlugosc()<<endl;
    cout<<"dlugosc boku 3 "<<a3->Dlugosc()<<endl;
    cout<<"dlugosc boku 4 "<<a4->Dlugosc()<<endl;
    k1 = new Kwadrat(*a1, *a2, *a3, *a4);
    cout<<"Obwod kwadratu wynosi: "<<k1->Obwod()<<endl;
    cout<<"Pole kwadratu wynosi: "<<k1->Pole()<<endl;
    system("PAUSE");
    getchar();
}

z gory dziekuje za zainteresowanie
Pozdrawiam

0

Temat nie jest za poważny zwłaszcza po tematach "Problem z błędem" lub "programowanie a fizyka"(zwłaszcza jego treść, już pomińmy sama nazwe)
A problem masz chyba z podstawami obiektowości.. napisz ten program imperatywnie a później weź sie za obiektowość...

0

Dziedziczenie w tym przypadku nie jest najlepszym rozwiązaniem.

0
Sid_ napisał(a)

A problem masz chyba z podstawami obiektowości...

Zdecydowanie się zgadzam...

w Twoim programie niezbyt dobrze jest zrobione dziedziczenie.
np. przykładowy Odcinek charakteryzuje się cechami odcinka (punkt końcowy i początkowy), ale także cechami pojedyńczego punktu (wspólrzędne x y z).
podobnie z Kwadratem... pojedyńcza figura charakteryzuje się cechami kwadratu (cztery boki), ale także cechami odcinka i pojedyńczego punktu...

0
blipek napisał(a)
Sid_ napisał(a)

A problem masz chyba z podstawami obiektowości...

Zdecydowanie się zgadzam...

w Twoim programie niezbyt dobrze jest zrobione dziedziczenie.
np. przykładowy Odcinek charakteryzuje się cechami odcinka (punkt końcowy i początkowy), ale także cechami pojedyńczego punktu (wspólrzędne x y z).
podobnie z Kwadratem... pojedyńcza figura charakteryzuje się cechami kwadratu (cztery boki), ale także cechami odcinka i pojedyńczego punktu...

nie mam pojecia jak sie do tego zabrac zeby zostalo to zrobione przyzwoicie po przeczytaniu kilku artykolow przegladnieciu paru programow itp itd potrafie napisac cos takiego. Dalej nie wiem... utknalem dlatego zaczalem szukac pomocy na forum

0
fantaf napisał(a)

nie mam pojecia jak sie do tego zabrac zeby zostalo to zrobione przyzwoicie po przeczytaniu kilku artykolow przegladnieciu paru programow itp itd potrafie napisac cos takiego. Dalej nie wiem... utknalem dlatego zaczalem szukac pomocy na forum

korzystająć z zapisu
class Odcinek:public Punkt
sugerujesz, że obiekt klasy Odcinek jest rodzaju swego rozwinięciem obiektu klasy Punkt
to znaczy, ze pojedyńczy obiekt klasy Odcinek charakteryzuje się nie tylko cechami odcinka, ale TAKŻE cechami klasy Punkt

0

w podobnym do Twojego problemie możnaby było zrobić dziedziczenie np. takie
Tworzymy klasę FIGURA
pózniej klasy dziedziczące po FIGURZE np. Prostokąt, Trójkąt, Pięciokąt, Kwadrat itp.

Prostokąt jest pewnego rodzaju rozwinięciej Figury
słowo Prostokąt jest bardziej szczegółowym określeniem Figury

0

ok dzieki poczytam o dziedziczeniu nieco wiecej i postaram sie to poprawic

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.