[C++] Wyja

Potrzebujesz pomocy z C, C++, perl, python, itp.
dawideo
Beginner
Posty: 154
Rejestracja: 25 czerwca 2007, 11:46
Lokalizacja: Zbychowo

[C++] Wyjaśnienie części kodu

Post autor: dawideo »

Hey czy może mi ktoś wyjaśnić część kodu?? Chodzi mi tylko o to co robi w tym przykładzie konstruktor beparametrowy i destruktor??? Bo jakoś nie mogę do tego dojść
A oto kod

Kod: Zaznacz cały

#include <iostream.h>
#include <conio.h>

class Prostokat  {

friend Prostokat operator*(Prostokat a, Prostokat b);     //operator * umozliwiajacy mnozenie pol obiektow uzywajac "nazw/wskaznikow" obiektow
friend Prostokat operator/(Prostokat a, Prostokat b);     //operator / umozliwiajacy dzielenie pol obiektow uzywajac "nazw/wskaznikow" obiektow

protected:
          float pole;
          float x, y;
public:

       virtual float poleProstokata () {return pole = (x*y);}
       Prostokat () {}                                   //konstruktor obiektu bez param.
       Prostokat (float, float);                         //konstruktor obiektu z zadanymi param.
       ~Prostokat() { }                                  //destruktor obiektu
       float PoleP()  { return Prostokat: :p ole; }        //funkcj zwracjaca pole obiektu.

};

Prostokat::Prostokat (float a, float b)
       {
       x = a;
       y = b;
       }

//***************************OPERATOR * *************************************/
Prostokat operator* (Prostokat a, Prostokat b)           
 {
  Prostokat c;
  c.pole = a.pole * b.pole;
  return c;
 }

//***************************OPERATOR / **************************************/

Prostokat operator/ (Prostokat a, Prostokat b)
 {
  Prostokat c;
  c.pole = a.pole / b.pole;
  return c;
 }

class Krzyzyk1 :p ublic Prostokat {

public:
        virtual float poleKrzyzyka1 () { return pole = ((2*(x*y))-(y*y)); }
        Krzyzyk1() ;
	Krzyzyk1(float, float);

};

Krzyzyk1::Krzyzyk1 (float a, float b)
    {
    x = a;
    y = b;
    }


class Krzyzyk2 :p ublic Prostokat{

public:
       virtual float poleKrzyzyka2 () { return pole = ( (4*(x*y))-(4*(y*y)) ); }
       Krzyzyk2 ();
       Krzyzyk2 (float, float);

};
Krzyzyk2::Krzyzyk2 (float a, float b)
    {
    x = a;
    y = b;
    }

//***********************************MAIN***********************************//
main ()
{

    Prostokat *a = new Prostokat (2, 1);
    Prostokat *b = new Prostokat(4, 2);
    Krzyzyk1 *c = new Krzyzyk1 (2, 1);
    Krzyzyk1 *d = new Krzyzyk1 (4, 2);
    Krzyzyk2 *e = new Krzyzyk2 (2, 1);
    Krzyzyk2 *f = new Krzyzyk2 (4, 2);

    cout << "Pole prostokata 'a' wynosi : " << a->poleProstokata() << endl;
    cout << "Pole prostokata 'b' wynosi : " << b->poleProstokata() << endl;
    cout << "Pole krzyzyka (+) 'c' wynosi : " << c->poleKrzyzyka1() << endl;
    cout << "Pole krzyzyka (+) 'd' wynosi : " << d->poleKrzyzyka1() << endl;
    cout << "Pole krzyzyka (#) 'e' wynosi : " << e->poleKrzyzyka2() << endl;
    cout << "Pole krzyzyka (#) 'f' wynosi : " << f->poleKrzyzyka2() << endl;

    cout << "\nIloczyn pol prostokatow : 'a' i 'b' = "
         << (*a * *b).PoleP() << endl;

    cout << "\nIloraz pol prostokata 'b' i krzyzyka(+) 'c' = "
         << (*b / *c).PoleP() << endl;

    cout << "\nIloczyn pol krzyzykow(+): 'c' i 'd' = "
         << (*c * *d).PoleP() << endl;

    cout << "\nIloczyn pol krzyzyka(+) 'd' i krzyzyka(#) 'e' = "
         << (*d * *e).PoleP() <<endl;

    cout << "\nIloczyn pol prostokat 'a' i krzyzyka(#) 'e' "
         << (*a * *e).PoleP() <<endl;

    delete a;
    delete b;
    delete c;
    delete d;
    delete e;
    delete f;

    cout << "\nNacisnij dowolny przycisk..." << endl;
    getchar();
}
Theq
Beginner
Posty: 140
Rejestracja: 16 kwietnia 2007, 19:00
Lokalizacja: Legnica

Post autor: Theq »

Nic nie robi
dawideo
Beginner
Posty: 154
Rejestracja: 25 czerwca 2007, 11:46
Lokalizacja: Zbychowo

Post autor: dawideo »

Skoro nic nie robi to po co on tam wogóle jest????
Killavus
Posty: 26
Rejestracja: 26 maja 2007, 13:23
Lokalizacja: Wroc³aw

Post autor: Killavus »

Nawyk programistyczny. Dość głupi zresztą :) .

Pozdrawiam.
Theq
Beginner
Posty: 140
Rejestracja: 16 kwietnia 2007, 19:00
Lokalizacja: Legnica

Post autor: Theq »

Ogolnie to kod za ciekawy nie jest, (np to tworzenie obiektow przez new zamiast poprostu Prostokat a(2,1) ). Moze ktos chcial miec mozliwosc tworzenia obiektu bez podania parametru.
dawideo
Beginner
Posty: 154
Rejestracja: 25 czerwca 2007, 11:46
Lokalizacja: Zbychowo

Post autor: dawideo »

Czyli jeśli dobrze rozumiem tego konstruktora jak i destruktora tam równie dobrze może wogóle nie być??
P.s. "new i delete" gościu się tłumaczył że chciał pokazać coś specyficznego dla języka C++ (chyba chodzi mu o to że w innych językach takiego czegoś nie ma :]) ale ja się nie znam :P więc jak narazie mu wierze :P

P.s Przeglądając dalej kod zauważyłem że autor również w klasach pochodnych posłużył się konstruktorem domyślnym (Krzyżyk1(); Krzyżyk2() ;) rozumiem że tam one też nic nie robia??? Bo te z parametrami to jasna sprawa.
grygus
Posty: 7
Rejestracja: 16 grudnia 2007, 22:00

Post autor: grygus »

Jeśli o mnie chodzi to destruktor w klasie bazowej powinien być tylko że virtual . Akurat w tym przykładzie nie jest on konieczny ale to tak apropo dobrych nawyków :)
ODPOWIEDZ