Ispravnost pisanja koda

poruka: 21
|
čitano: 2.927
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Ispravnost pisanja koda

Hej, imam pitanje.

Zanima me dali je ovo opcenito ispravan nacin programiranja i korištenja objekata?

Unaprijed hvala.

 

#include <iostream>
#include <stdlib.h>
#include <cmath>
#define PI 3.14
using namespace std;

class prizma
{
     public: void oplosje()
    {
       system("CLS");
       float oplosje_Prizme,B,P= 0;
       cout <<"Oplosje prizme"<<endl;
        cout <<"B:"; cin >> B;
       cout <<"P:"; cin >> P;
       oplosje_Prizme = 2*B+P;
       cout <<"O: " << oplosje_Prizme<<endl;
    }

       public: void volumen()
    {
       system("CLS");
       float volumen_Prizme,B,V= 0;
       cout <<"Volumen prizme"<<endl;
         cout <<"B:"; cin >> B;
       cout <<"V:"; cin >> V;
       volumen_Prizme = B*V;
       cout <<"V: " << volumen_Prizme<<endl;
    }
};

class valjak
{
          public: void oplosje()
    {
          system("CLS");
          float oplosje_Valjka,R,V= 0;
          cout <<"Oplosje valjka"<<endl;
          cout <<"R:"; cin >> R;
          cout <<"V:"; cin >> V;
          oplosje_Valjka = 2*R*PI*(R+V);
          cout <<"O: " << oplosje_Valjka<<endl;
     }

        public: void volumen()
     {
         system("CLS");
         float volumen_Valjka,R,V= 0;
          cout <<"Volumen valjka"<<endl;
         cout <<"R:"; cin >> R;
         cout <<"V:"; cin >> V;
         volumen_Valjka = pow(R,2)*PI*V;
         cout <<"O: " << volumen_Valjka<<endl;
      }
};

 int izbor()
       {
          int izbor,izbor1 = 0;

          cout <<"1. prizma"<<endl;
          cout <<"2. valjak" << endl;
          cout << endl;
          cout << "Unesi broj: "; cin >> izbor;
            cout << endl;
          switch(izbor)
          {
          case 1:
           cout <<"1. oplosje" << endl;
           cout << "2. volumen" << endl;
           cout << endl;
           cout << "Unesi broj: "; cin >> izbor1;
            if (izbor1 == 1){return 1;}
            else {return 2;}
            break;

          case 2:
            cout <<"1. oplosje" << endl;
            cout << "2. volumen" << endl;
            cout << endl;
            cout << "Unesi broj: "; cin >> izbor1;
            cout << endl;
            if (izbor1 == 1){    return 3;}
            else {return 4;}
            break;
    }
}


int main()
{
    valjak _valjak;
    prizma _prizma;
    switch(izbor())
    {
    case 1:
    _prizma.oplosje();
    break;
   
    case 2:
    _prizma.volumen();
    break;

    case 3:
    _valjak.oplosje();
    break;

    case 4:
    _valjak.volumen();
    break;

    default:
    exit(1);
    }

    system("PAUSE");
    return 0;
}

 
0 0 hvala 0
17 godina
offline
Ispravnost pisanja koda

O miša mu, što si zakomplicirao

pokušaj ovako učiti:

npr trebaš izračunati oplošje i volumen valjka:

1. napraviš klasu valjak

2. u klasi definiraš tri privatna podatkovna člana r - polumjer, v - visina, PI

3. kao javna postaviš dva metoda bez parametara koji račnuaju i vraćaju vrijednost oplošja i volumena

4. definiraš konstruktor klase sa parametrima polumjer i visina u kojem postaviš vrijednosti privatnih članova klase

5. u main funkciji instaciraš objekt klase sa parametrima polumjer i visina

6. za dotični objekt oplošje i volumen izračunaš pozivom metoda Oplosje() i Volumen()

 

 

#include <iostream>

using namespace std;

class Valjak
{
   
    double r, v, PI;

public:
    Valjak(double polumjer, double visina)
    {
       r = polumjer;
       v = visina;
       PI = 3.14159265;
    }
    double OplosjeValjka()
    {
       return 2 * r * PI * (r + v);
    }
    double VolumenValjka()
    {
       return r * r * PI * v;
    }
};


int main()
{
    Valjak v(3.22, 5.84);
    cout<< "Oplosje valjka v: " << v.OplosjeValjka() << endl;
    cout<< "Volumen valjka v: " << v.VolumenValjka() << endl;
 
    return 0;
}

Poruka je uređivana zadnji put pet 27.5.2011 15:49 (Floki).
 
0 0 hvala 0
16 godina
odjavljen
offline
Re: Ispravnost pisanja koda
Floki kaže...

O miša mu, što si zakomplicirao

pokušaj ovako učiti:

npr trebaš izračunati oplošje i volumen valjka:

1. napraviš klasu valjak

2. u klasi definiraš tri privatna podatkovna člana r - polumjer, v - visina, PI

3. kao javna postaviš dva metoda bez parametara koji račnuaju i vraćaju vrijednost oplošja i volumena

4. definiraš konstruktor klase sa parametrima polumjer i visina u kojem postaviš vrijednosti privatnih članova klase

5. u main funkciji instaciraš objekt klase sa parametrima polumjer i visina

6. za dotični objekt oplošje i volumen izračunaš pozivom metoda Oplosje() i Volumen()

Samo bih još dodao da je u ovom slučaju najbolje napraviti interface Tijelo s dvije metode bez parametra koje račnuaju i vraćaju vrijednost oplošja i volumena, pa onda za svako tijelo kreiraš klasu koja implementira taj interface. Ako trebaš baratati s oplošjem i volumenom dalje u programu, na taj način možeš pristupiti oplošju i volumenu svakog tijela, bez da vodiš računa o kojem se konkretno tijelu radi.

Big wheel keep on turning, Proud Mary keep on burning, Trolling, trolling, trolling on the river.
14 godina
neaktivan
offline
Re: Ispravnost pisanja koda

Primjer?

16 godina
odjavljen
offline
Re: Ispravnost pisanja koda
BuG00 kaže...

Primjer?

Trenutno nemam preterano vremena, a u zadnje vrijeme sam u C# i Javi, pa bih mogao nešto i pogriješiti. Mislim da je ovo ok za početak:

http://accu.org/index.php/journals/233

Big wheel keep on turning, Proud Mary keep on burning, Trolling, trolling, trolling on the river.
16 godina
offline
Re: Ispravnost pisanja koda
Floki kaže...

O miša mu, što si zakomplicirao

pokušaj ovako učiti:

npr trebaš izračunati oplošje i volumen valjka:

1. napraviš klasu valjak

2. u klasi definiraš tri privatna podatkovna člana r - polumjer, v - visina, PI

3. kao javna postaviš dva metoda bez parametara koji račnuaju i vraćaju vrijednost oplošja i volumena

4. definiraš konstruktor klase sa parametrima polumjer i visina u kojem postaviš vrijednosti privatnih članova klase

5. u main funkciji instaciraš objekt klase sa parametrima polumjer i visina

6. za dotični objekt oplošje i volumen izračunaš pozivom metoda Oplosje() i Volumen()

 

 

#include <iostream>

using namespace std;

class Valjak
{
   
    double r, v, PI;

public:
    Valjak(double polumjer, double visina)
    {
       r = polumjer;
       v = visina;
      PI = 3.1419265;
    }
    double OplosjeValjka()
    {
       return 2 * r * PI * (r + v);
    }
    double VolumenValjka()
    {
       return r * r * PI * v;
    }
};


int main()
{
    Valjak v(3.22, 5.84);
    cout<< "Oplosje valjka v: " << v.OplosjeValjka() << endl;
    cout<< "Volumen valjka v: " << v.VolumenValjka() << endl;
 
    return 0;
}

Necu puno pametovati oko samog koda, ali ovaj krivi PI me totalno bode u oko...

Lack of money is the root of all evil. George Bernard Shaw
17 godina
offline
Ispravnost pisanja koda

 

E, desilo se, a što mogu, moram ići oćale tražiti

Ispravljeno!

 

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Ispravnost pisanja koda

A ovaj kod:

#include <iostream>
#include <stdlib.h>
#include <cmath>
using namespace std;

struct Rover
{
    int roverPositionX;
    int roverPositionY;
    int roverHeading_numeric;
    char rover_Heading;
    char rover_Instruction[20];
}rover;

void detectHeading()
{
    if(rover.roverHeading_numeric == 1) {rover.rover_Heading = 'N';}  if(rover.roverHeading_numeric == 2) {rover.rover_Heading = 'E';}
    if(rover.roverHeading_numeric == 3) {rover.rover_Heading = 'S';}   if(rover.roverHeading_numeric == 4) {rover.rover_Heading = 'W';}
    if(rover.roverHeading_numeric > 4) {rover.roverHeading_numeric = 1;} if (rover.roverHeading_numeric < 1) {rover.roverHeading_numeric = 4;}
}

void setHeading()
{
    if (rover.rover_Heading == 'N') {rover.roverHeading_numeric = 1;} if (rover.rover_Heading == 'E') {rover.roverHeading_numeric = 2;}
    if (rover.rover_Heading == 'S') {rover.roverHeading_numeric = 3;} if (rover.rover_Heading == 'W') {rover.roverHeading_numeric = 4;}
}

void inputData()
{   
    cout <<"Rover position coordinates [X,Y,H]: ";
    cin >> rover.roverPositionX;
    cin >> rover.roverPositionY;
    cin >> rover.rover_Heading;
    cout <<"Rover instructions [string]: ";
    setHeading();
}

void outputData()
{
    for (int i = 0; i<20;i++)
    {
       cin >> rover.rover_Instruction[i];
       if(rover.rover_Instruction[i] == 'X') {break;}
       else
       {
          if (rover.rover_Instruction[i] == 'M' && rover.roverHeading_numeric == 1) {rover.roverPositionY ++;}     /*N*/
          if (rover.rover_Instruction[i] == 'M' && rover.roverHeading_numeric == 2) {rover.roverPositionX ++;}    /*E*/
          if (rover.rover_Instruction[i] == 'M' && rover.roverHeading_numeric == 3 ) {rover.roverPositionY --;}    /*S*/
          if (rover.rover_Instruction[i] == 'M' && rover.roverHeading_numeric == 4 ) {rover.roverPositionX --;}  /*W*/

          if (rover.rover_Instruction[i] == 'L') {rover.roverHeading_numeric --; detectHeading();}
          if (rover.rover_Instruction[i] == 'R') {rover.roverHeading_numeric ++; detectHeading();}
       }
    }

    cout << "Final destination coordinates [X,Y,H]: " << rover.roverPositionX << rover.roverPositionY << rover.rover_Heading << endl;
}

int main()
{   
    system("Color F");
    inputData();
    outputData();
    system("PAUSE");
    return 0;
}

17 godina
moderator
offline
Re: Ispravnost pisanja koda
BuG00 kaže...

A ovaj kod:

#include <iostream>
#include <stdlib.h>
#include <cmath>
using namespace std;

struct Rover
{
    int roverPositionX;
    int roverPositionY;
    int roverHeading_numeric;
    char rover_Heading;
    char rover_Instruction[20];
}rover;

Koristiš C++, imaš jednu statički alociranu strukturu i imaš funkcije koje koriste tu jednu statički alociranu strukturu. To je besmisleno. Isto tako si sve te funkcije mogao ugurati u tu strukturu pa ne bi onda svuda morao pisati rover.blablabla.

 

Također, zašto komplicirati s nazivima varijabli? Ako imaš strukturu Rover, zašto ti sve varijable počinju s rover? Ako se zna, pošto su u toj strukturu, da se odnose upravo na rover? Također, zašto si nedosljedan? U prve dvije varijable nemaš podvlake (_), u ostalima imaš.

 

BuG00 kaže...
void detectHeading()

{
    if(rover.roverHeading_numeric == 1) {rover.rover_Heading = 'N';}  if(rover.roverHeading_numeric == 2) {rover.rover_Heading = 'E';}
    if(rover.roverHeading_numeric == 3) {rover.rover_Heading = 'S';}   if(rover.roverHeading_numeric == 4) {rover.rover_Heading = 'W';}
    if(rover.roverHeading_numeric > 4) {rover.roverHeading_numeric = 1;} if (rover.roverHeading_numeric < 1) {rover.roverHeading_numeric = 4;}
}

Umjesto prva četiri if-a si mogao koristiti switch. Ili, još bolje, mogao si imati jedno polje s vrijednostima 'N', "E', 'S', 'W' pa jednostavno dobiti te vrijednosti preko indeksa (a indeks ti je roverHeading_numeric-1).

 

BuG00 kaže...
void setHeading()

{
    if (rover.rover_Heading == 'N') {rover.roverHeading_numeric = 1;} if (rover.rover_Heading == 'E') {rover.roverHeading_numeric = 2;}
    if (rover.rover_Heading == 'S') {rover.roverHeading_numeric = 3;} if (rover.rover_Heading == 'W') {rover.roverHeading_numeric = 4;}
}

Što ako korisnik upiše malo slovo?

 

BuG00 kaže...

void inputData()
{   
    cout <<"Rover position coordinates [X,Y,H]: ";
    cin >> rover.roverPositionX;
    cin >> rover.roverPositionY;
    cin >> rover.rover_Heading;
    cout <<"Rover instructions [string]: ";
    setHeading();
}

Kako korisnik zna što treba upisati za H?

 

BuG00 kaže...

void outputData()
{
    for (int i = 0; i<20;i++)
    {
       cin >> rover.rover_Instruction[i];
       if(rover.rover_Instruction[i] == 'X') {break;}
       else
       {
          if (rover.rover_Instruction[i] == 'M' && rover.roverHeading_numeric == 1) {rover.roverPositionY ++;}     /*N*/
          if (rover.rover_Instruction[i] == 'M' && rover.roverHeading_numeric == 2) {rover.roverPositionX ++;}    /*E*/
          if (rover.rover_Instruction[i] == 'M' && rover.roverHeading_numeric == 3 ) {rover.roverPositionY --;}    /*S*/
          if (rover.rover_Instruction[i] == 'M' && rover.roverHeading_numeric == 4 ) {rover.roverPositionX --;}  /*W*/

          if (rover.rover_Instruction[i] == 'L') {rover.roverHeading_numeric --; detectHeading();}
          if (rover.rover_Instruction[i] == 'R') {rover.roverHeading_numeric ++; detectHeading();}
       }
    }

    cout << "Final destination coordinates [X,Y,H]: " << rover.roverPositionX << rover.roverPositionY << rover.rover_Heading << endl;
}

Zar ne bi za instrukciju 'M' bilo smislenije da imaš jedan vanjski uvjet (ako je == 'M') pa da onda u unutrašnjem bloku provjeravaš heading_numeric? Znači:

if (rover.rover_Instruction[i] == 'M') {

  switch(rover.roverHeading_numeric) {

   case 1: rover.roverPositionY ++; break;

   case 2: rover.roverPositionX ++; break;

    ...

  }

}

Poruka je uređivana zadnji put sub 28.5.2011 19:39 (mbaksa).
17 godina
offline
Re: Ispravnost pisanja koda
MrBlc kaže...
Floki kaže...

O miša mu, što si zakomplicirao

pokušaj ovako učiti:

npr trebaš izračunati oplošje i volumen valjka:

1. napraviš klasu valjak

2. u klasi definiraš tri privatna podatkovna člana r - polumjer, v - visina, PI

3. kao javna postaviš dva metoda bez parametara koji račnuaju i vraćaju vrijednost oplošja i volumena

4. definiraš konstruktor klase sa parametrima polumjer i visina u kojem postaviš vrijednosti privatnih članova klase

5. u main funkciji instaciraš objekt klase sa parametrima polumjer i visina

6. za dotični objekt oplošje i volumen izračunaš pozivom metoda Oplosje() i Volumen()

Samo bih još dodao da je u ovom slučaju najbolje napraviti interface Tijelo s dvije metode bez parametra koje račnuaju i vraćaju vrijednost oplošja i volumena, pa onda za svako tijelo kreiraš klasu koja implementira taj interface. Ako trebaš baratati s oplošjem i volumenom dalje u programu, na taj način možeš pristupiti oplošju i volumenu svakog tijela, bez da vodiš računa o kojem se konkretno tijelu radi.

To sam napravio preko virtualne funkcije u baznoj klasi, problem mi je bio to što valjak i prizma traže različit broj argumenata za izračun oplošja i volumena - pa sam uveo preopterećeni metod UnosParametara(), na ovaj način se unos parametara vrši preko specifičnog metoda - a kasnije neovisno o geometrijskom liku se računa oplošje i volumen.

 

 



class GeometrijskoTijelo
{
protected:
    double _polumjer, _visina, _baza, _pobocje;
public:
    virtual double Oplosje() = 0;
    virtual double Volumen() = 0;
    void UnosParametara(double polumjer, double visina)
    {
       _polumjer = polumjer;
       _visina = visina;
    }
    void UnosParametara(double baza, double pobocje, double visina)
    {
       _baza = baza;
       _pobocje = pobocje;
       _visina = visina;
    }

};


class Valjak : public GeometrijskoTijelo
{
public:
   
    double Oplosje()
    {
       return 2 * _polumjer * PI * (_polumjer + _visina);
    }
    double Volumen()
    {
       return _polumjer * _polumjer * PI * _visina;
    }
};


class Prizma : public GeometrijskoTijelo
{
public:
    double Oplosje()
    {
       return 2 * _baza + _pobocje;
    }
    double Volumen()
    {
       return _baza * _visina ;
    }
};


int main()
{
    GeometrijskoTijelo* valjak = new Valjak;
    GeometrijskoTijelo* prizma = new Prizma;

    valjak->UnosParametara(5.4, 8.5);
    prizma->UnosParametara(3.4, 5.3, 4.7);

    cout<< "Oplosje valjka: " << valjak->Oplosje() << endl;
    cout<< "Volumen valjka: " << valjak->Volumen() << endl;
    cout<< "Oplosje prizme: " << prizma->Volumen() << endl;
    cout<< "Volumen prizme: " << prizma->Volumen() << endl;
    delete valjak;
    delete prizma;
    return 0;
}

Poruka je uređivana zadnji put ned 29.5.2011 12:50 (Floki).
16 godina
odjavljen
offline
Re: Ispravnost pisanja koda
Floki kaže...

To sam napravio preko virtualne funkcije u baznoj klasi, problem mi je bio to što valjak i prizma traže različit broj argumenata za izračun oplošja i volumena - pa sam uveo preopterećeni metod UnosParametara(), na ovaj način se unos parametara vrši preko specifičnog metoda - a kasnije neovisno o geometrijskom liku se računa oplošje i volumen.

Ovo ti nema smisla. Unos parametara je metoda specifična za svako tijelo te bi se zato tamo trebala i nalaziti. S obzirom da s tijelom nemaš  što raditi bez parametara i da nemaš zašto kreirati tijelo dok ne znaš parametre, nema razloga izmišljati metodu Unos parametara kada to može raditi konstruktor. U GeometrijskoTijelo ima smisla staviti konstantu PI jer je koristimo za više tijela i za sve je ista (iako je i to upitno jer je u nekima tijelima nepotrebna i samo zauzima memoriju, ovo je više radi preglednosti koda), te po istoj logici se mogu ubaciti i metode za računanje površina pravokutnika, trokuta i kruga koje bi poslje mogli koristiti za računanje oplošja i volumena (morale bi biti protected).

 

class GeometrijskoTijelo
{
  protected:
      double PI = 3.14159265;

  public:
      virtual double Oplosje() = 0;
      virtual double Volumen() = 0;
};


class Valjak : public GeometrijskoTijelo
{
  private:
      double _polumjer, _visina;

  public:
      Valjak(double polumjer, double visina)
      {
          _polumjer = polumjer;
          _visina = visina;
      }
      double Oplosje()
      {
          return 2 * _polumjer * PI * (_polumjer + _visina);
      }
      double Volumen()
      {
          return _polumjer * _polumjer * PI * _visina;
      }
};


class Prizma : public GeometrijskoTijelo
{
  private:
      double _visina, _baza, _pobocje;

  public:
      void Prizma(double baza, double pobocje, double visina)
      {
          _baza = baza;
          _pobocje = pobocje;
          _visina = visina;
      }
      double Oplosje()
      {
          return 2 * _baza + _pobocje;
      }
      double Volumen()
      {
          return _baza * _visina ;
      }
};


int main()
{
    GeometrijskoTijelo* valjak = new Valjak(5.4, 8.5);
    GeometrijskoTijelo* prizma = new Prizma(3.4, 5.3, 4.7);

    cout<< "Oplosje valjka: " << valjak->Oplosje() << endl;
    cout<< "Volumen valjka: " << valjak->Volumen() << endl;
    cout<< "Oplosje prizme: " << prizma->Oplosje() << endl;
    cout<< "Volumen prizme: " << prizma->Volumen() << endl;
    delete valjak;
    delete prizma;
    return 0;
}

Big wheel keep on turning, Proud Mary keep on burning, Trolling, trolling, trolling on the river.
15 godina
offline
Ispravnost pisanja koda

Evo sam malo isprobavao pa recite mi dali je ovaj kod u redu !?

 

 

  • #include <stdio.h>
  • #include <iostream>
  • using namespace std;
  • class GeometrijskoTijelo
  • {
  • public:
  •     virtual double Povrsina() = 0;
  •     virtual double Opseg() = 0;
  • };
  • class Pravokutnik: public GeometrijskoTijelo
  • {
  • private:
  •     double _a,_b;
  • public:
  •     Pravokutnik (double a, double b)
  •     {
  •        _a = a;
  •        _b = b;
  •     }
  •     double Povrsina() { return _a*_b; }
  •     double Opseg () { return 2* (_a+_b); }
  • };
  • void main()
  • {
  •     GeometrijskoTijelo *pravokutnik = new Pravokutnik(5,5);
  •     cout << pravokutnik->Povrsina() << endl;
  •     cout << pravokutnik->Opseg() << endl;
  •     system ("PAUSE");
  • }

 

Moj PC  
0 0 hvala 0
17 godina
offline
Ispravnost pisanja koda

Ovo ti nema smisla. Unos parametara je metoda specifična za svako tijelo te bi se zato tamo trebala i nalaziti. S obzirom da s tijelom nemaš što raditi bez parametar . . .

 

 

Jest, bolje je, sa jednom primjedbom, compiler mi ne dozvoljava inicijalizaciju podatkovnog člana ako ga ne označim kao konstantnog,

a onda opet prihvaća samo integer tip, zato sam stavio u define

Poruka je uređivana zadnji put ned 29.5.2011 15:03 (Floki).
 
0 0 hvala 0
17 godina
offline
Re: Ispravnost pisanja koda
NiGHT_RiDER92 kaže...

Evo sam malo isprobavao pa recite mi dali je ovaj kod u redu !?

 

 

  • #include <stdio.h>
  • #include <iostream>
  • using namespace std;
  • class GeometrijskoTijelo
  • {
  • public:
  •     virtual double Povrsina() = 0;
  •     virtual double Opseg() = 0;
  • };
  • class Pravokutnik: public GeometrijskoTijelo
  • {
  • private:
  •     double _a,_b;
  • public:
  •     Pravokutnik (double a, double b)
  •     {
  •        _a = a;
  •        _b = b;
  •     }
  •     double Povrsina() { return _a*_b; }
  •     double Opseg () { return 2* (_a+_b); }
  • };
  • void main()
  • {
  •     GeometrijskoTijelo *pravokutnik = new Pravokutnik(5,5);
  •     cout << pravokutnik->Povrsina() << endl;
  •     cout << pravokutnik->Opseg() << endl;
  •     system ("PAUSE");
  • }

 

samo fali delete pravokutnik - pošto si radio dinamičku alokaciju objekta - moraš osloboditi memoriju i int main() umjesto void main()

15 godina
offline
Re: Ispravnost pisanja koda

Aha, da, to sam zaboravio ...

Znaci trebalo bi jos dodati delete pravokutnik ako se ne varam !?

 

Imam jos jedno pitanje, zasto kod ovog:

 

virtual double Povrsina() = 0;

 

mora ići na kraju = 0, ako toga nema onda ne radi ?

Poruka je uređivana zadnji put ned 29.5.2011 15:08 (NiGHT_RiDER92).
17 godina
offline
Re: Ispravnost pisanja koda
NiGHT_RiDER92 kaže...

Aha, da, to sam zaboravio ...

Znaci trebalo bi jos dodati delete pravokutnik ako se ne varam !?

 

Imam jos jedno pitanje, zasto kod ovog:

 

virtual double Povrsina() = 0;

 

mora ići na kraju = 0, ako toga nema onda ne radi ?

to ti je pure virtual function - čista virtualna funkcija koja je preložak za funkciju u izvedenoj klasi - preko nje u stvari možeš deklarirati pravokutnik kao geometrijsko tijelo,

odnosno vršiti izračun

Poruka je uređivana zadnji put ned 29.5.2011 15:16 (Floki).
15 godina
offline
Re: Ispravnost pisanja koda

Znači kad koristimo virtualne funkcije, preko njih ustvari pozivamo prave funkcije koje zapravo nešto rade a u svakoj klasi ta funkcija s istim imenom moze raditi nešto drugo ?

17 godina
offline
Re: Ispravnost pisanja koda
NiGHT_RiDER92 kaže...

Znači kad koristimo virtualne funkcije, preko njih ustvari pozivamo prave funkcije koje zapravo nešto rade a u svakoj klasi ta funkcija s istim imenom moze raditi nešto drugo ?

    GeometrijskoTijelo* valjak = new Valjak(5.4, 8.5);

    cout<< "Oplosje valjka: " << valjak->Oplosje() << endl;

 

Što smo u stvari napravili - deklarirali objekt valjak kao tip klase GeometrijskoTijelo a instancirali ga sa konstruktorom klase Valjak

da bi to mogli, odnosno da bi izračunao oplošje objekta klase GeometrijskoTijelo preko metoda izvedene klase Valjak - klasa GeometrijskoTijelo mora imati predložak tog metoda.

Kad ne bi imali predložak metoda u baznoj klasi GeometrijskoTijelo onda ne bi mogli deklarirati objekt kao objekt te klase a da vršimo izračun preko metoda izvedene klase.

 

naravno - moguće je vršiti takve kombinacije samo zahvaljujući tome jer je klasa GeometrijskoTijelo bazna klasa klasi Valjak - odnosno ona je izvedena iz nje.

Poruka je uređivana zadnji put ned 29.5.2011 15:45 (Floki).
17 godina
moderator
offline
Re: Ispravnost pisanja koda
NiGHT_RiDER92 kaže...

Evo sam malo isprobavao pa recite mi dali je ovaj kod u redu !?

 

 

  • #include <stdio.h>
  • #include <iostream>
  • using namespace std;
  • class GeometrijskoTijelo
  • {
  • ...
  •     GeometrijskoTijelo *pravokutnik = new Pravokutnik(5,5);
  • ...

Napravio si kardinalnu pogrešku! Pravokutnik nije geometrijsko tijelo nego geometrijski lik. {#}

15 godina
offline
Re: Ispravnost pisanja koda

ma to je zbog nepažnje, gledao sam onaj kod otprije gdje je spomenuto "geometrijsko tijelo" pa sam pokusao nesto sam iskombinirati i nakraju sam zaboravio naziv promijeniti :D

16 godina
neaktivan
offline
Re: Ispravnost pisanja koda

Provrti malo po forum tražilici...imaš na ovom forumu više detaljnih objašnjenja o klasama ,objektima i virtualnim funkcijama.

Private
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice