problem z konstruktorem

0

Witam. Mam do napisania obiektowo program liczący pola i obwody figur w układzie współrzędnych. Użytkownik podaje współrzędne wierzchołków, które mają być przekazane do danej klasy przez jej konstruktor i tu pojawia się problem. Mam klasę Figura, klasa np. Trojkat dziedziczy z klasy Figura. W Figura mam metody odpowiedzialne za zorientowanie się jakie figury użytkownik chce policzyć (trójkąt lub czworokąt) i metodę która pobiera od użytkownika współrzędne i zapisuje współrzędne wszystkich figur w dwóch tablicach: wierzcholkiX i wierzcholkiY. I teraz nie mam pojęcia jak sformułować konstruktor aby odpowiednie wartości tablic były przekazywane do klasy np. Trojkat przez konstruktor w tej klasie. Dziękuję za pomoc. Tu fragment kodu:

 #include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

class Figura
{
    private:
    int trojkaty,kwadraty,czworo;
    int * wierzcholkiX;
    int * wierzcholkiY;
    string figury;


    public:

    double pole();
    double obwod();

    void zbierz()
    {
        cout<<"Podaj ilosc i typ figur: t - trojkat, c - czworokat, k - kwadrat: "<<endl;
        cin>>figury;
        int dlugosc;
        trojkaty=0;
        kwadraty=0;
        czworo=0;
        dlugosc = figury.length();
        for(int i=0; i<dlugosc; i++)
        {
            if(figury[i]=='t')
            trojkaty++;

            else
            if(figury[i]=='c')
            czworo++;

            else
            if(figury[i]=='k')
            kwadraty++;
        }
        wierzcholkiX = new int[3*trojkaty+4*czworo+4*kwadraty];
        wierzcholkiY = new int[3*trojkaty+4*czworo+4*kwadraty];
        int miejsceX=0; //gdzie jest w ^ tablicy
        int miejsceY=0;

        if(trojkaty!=0)
            //cout<<3*trojkaty+4*czworo+4*kwadraty;
            for(int i=0; i<trojkaty; i++)
            {
                for(int j=0; j<3; j++)
                {
                    cout<<"Wprowadz wspolrzedna X "<<j+1<<" wierzcholka "<<i+1<<" trojkata: ";
                    cin>>wierzcholkiX[miejsceX];
                    miejsceX++;
                    cout<<"Wprowadz wspolrzedna Y "<<j+1<<" wierzcholka "<<i+1<<" trojkata: ";
                    cin>>wierzcholkiY[miejsceY];
                    miejsceY++;
                }


            }

        if(czworo!=0)
            for(int i=0; i<czworo; i++)
            {
                for(int j=0; j<4; j++)
                {
                    cout<<"Wprowadz wspolrzedna X "<<j+1<<" wierzcholka "<<i+1<<" czworokata: ";
                    cin>>wierzcholkiX[miejsceX];
                    miejsceX++;
                    cout<<"Wprowadz wspolrzedna Y "<<j+1<<" wierzcholka "<<i+1<<" czworokata: ";
                    cin>>wierzcholkiY[miejsceY];
                    miejsceY++;
                }

            }

        if(kwadraty!=0)
            for(int i=0; i<kwadraty; i++)
            {
                for(int j=0; j<4; j++)
                {
                    cout<<"Wprowadz wspolrzedna X "<<j+1<<" wierzcholka "<<i+1<<" kwadratu: ";
                    cin>>wierzcholkiX[miejsceX];
                    miejsceX++;
                    cout<<"Wprowadz wspolrzedna Y "<<j+1<<" wierzcholka "<<i+1<<" kwadratu: ";
                    cin>>wierzcholkiY[miejsceY];
                    miejsceY++;
                }

            }


    }

    void wyswietl()
    {
        int miejsce=0;
        if(trojkaty!=0)
            for(int i=0; i<trojkaty; i++)
            {
                cout<<"Wspolrzedne "<<i+1<<" trojkata to: ";
                for(int j=miejsce; j<miejsce+3; j++)
                    {
                        cout<<"("<<wierzcholkiX[j]<<", "<<wierzcholkiY[j]<<")"<<endl;
                    }

                miejsce=miejsce+3;
            }

        if(czworo!=0)
            for(int i=0; i<czworo; i++)
            {
                cout<<"Wspolrzedne "<<i+1<<" czworokata to: ";
                for(int j=miejsce; j<miejsce+4; j++)
                    {
                        cout<<"("<<wierzcholkiX[j]<<", "<<wierzcholkiY[j]<<")"<<endl;
                    }

                miejsce=miejsce+4;
            }

        if(kwadraty!=0)
            for(int i=0; i<kwadraty; i++)
            {
                cout<<"Wspolrzedne "<<i+1<<" kwadratu to: ";
                for(int j=miejsce; j<miejsce+4; j++)
                    {
                        cout<<"("<<wierzcholkiX[j]<<", "<<wierzcholkiY[j]<<")"<<endl;
                    }

                miejsce=miejsce+4;
            }
    }
};

class Trojkat : public Figura//<---------------konstruktor needed ;)
{


    public:

    double pole()
    {

        a=sqrt(((x2-x1)^2)+((y2-y1)^2));
        b=sqrt(((x3-x2)^2)+((y3-y2)^2));
        c=sqrt(((x3-x1)^2)+((y3-y1)^2));
        p=(a+b+c)/2;
        return sqrt(p*(p-a)*(p-b)*(p-c));
    }

    double obwod()
    {
        a=sqrt(((x2-x1)^2)+((y2-y1)^2));
        b=sqrt(((x3-x2)^2)+((y3-y2)^2));
        c=sqrt(((x3-x1)^2)+((y3-y1)^2));
        return a+b+c;
    }

    private:

    int x1,y1,x2,y2,x3,y3;
    double a,b,c,p;
};
0

http://www.remek.internecik.com/lekcjeC/C++.php?lekcja=35

Ciężko zapytanie wpisać do Google'a co nie?

0

Lekcja na dziś polimorfizm. Skoro pole i obwód wiesz że mozesz implementować w klasie pochodnej to po co taka dziwna funkcja zbierz()?

0

Spodziewałem sie właśnie takich odpowiedzi z linkami do artykułów. Trzeba pokarać początkującego jak śmiał zadać takie pytanie... I to w dziale Newbie! Dla takich problemów powinien być pewnie stworzony dział 'pytania debili' nie? Dowartościowaliście się już wystarczająco? Może pytam bo przeczytałem kilka artykułów po kilka razy i nadal nie wiem jak przekazać te dane z tablicy do konstruktora?

0

Ten konstruktor to nie jest Twój problem, Twoim problemem jest błędny projekt tego programu. Zapewne jest to coś, co robisz na ocenę a nie dla własnej przyjemności - za taki program nie powinieneś i pewnie nie dostaniesz pozytywnej oceny.

Przeanalizuj to od początku. Masz bazową klasę figura, dziedziczyć z niej będą trzy klasy określające konkretny rodzaj figury. Dlaczego więc klasa bazowa (jakaś figura) wykonuje operacje dla kwadratu (konkretna figura)? W tym co masz zrobić chodzi właśnie o to, żebyś stworzył taką hierarchię i odpowiednio podzielił funkcjonalność. Bez czytania i chwili zastanowienia tego nie zrobisz.

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