Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Definisati apstraktnu klasu Figura (apstrakcija šahovskih figura)?

  • 10 odgovora
  • 3.761 pregleda

Najnovija ↓

Definisati apstraktnu klasu Figura (apstrakcija šahovskih figura)? 07.02.2010. u 14:58 · pre 203 meseca
izmenjeno 1 put, poslednji put fanfare 07.02.2010. u 15:08
  1. fanfare07.02.2010. u 15:08zapis iz teksta poruke
#1
Nisam siguran da li sam dobro napisao kod! Bilo bi poželjno da ga neko prokomentariše.

Zadatak:





Kod koji sam napisao:
Code:
# include <iostream>
using namespace std;

class Figura {
      public:
             Figura(int r, int k)
               { 
                 red=new int[8] ;kolona=new int[8];
                 red[r]=vrsta_figure; kolona[k]=vrsta_figure;
               }
             char operator ()=0;
              
      protected:
                int *red,*kolona,;
                char vrsta_figure; 
}; 
Re: Definisati apstraktnu klasu Figura (apstrakcija šahovskih figura)? 07.02.2010. u 15:15 · pre 203 meseca #2
nije dobro, ne treba svaka figura da cuva svoju kopiju sahovske table vec treba samo da zapamti svoje koordinate na istoj, takle ne pravis nizove vec samo pamtis r i k.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Definisati apstraktnu klasu Figura (apstrakcija šahovskih figura)? 07.02.2010. u 16:14 · pre 203 meseca #3
Znaci dovoljno je samo :
Code:
# include <iostream>
using namespace std;

class Figura {
      public:
             Figura(int r, int k)
               { 
                 red=r ;kolona=k;
               }
             char operator ()=0;
              
      protected:
                int red,kolona,;
                char vrsta_figure; 
}; 


I interesuje me da li treba operatorsku f-iju () preklopiti u ovoj klasi ili u nekoj izvedenoj i na koji nacin?
Re: Definisati apstraktnu klasu Figura (apstrakcija šahovskih figura)? 08.02.2010. u 10:41 · pre 203 meseca #6
Citat:
fanfare: I interesuje me da li treba operatorsku f-iju () preklopiti u ovoj klasi ili u nekoj izvedenoj i na koji nacin?


Tekst zadatka je sročen tako da može da zbuni čoveka. Čista virtuelna funkcija mora da bude implementirana u nekoj izvedenoj klasi (inače nije čista nego samo virtuelna). Međutim, ne samo što je dato objašnjenje šta funkcija/operator treba da radi (insinuirajući da to treba da se vidi u rešenju), nego je i jedini potreban podatak (vrsta figure) već dat u osnovnoj klasi (ponovo navodeći na zaključak da i kod koji koristi ovaj podatak treba da bude u osnovnoj klasi).

Način na koji bi preklopio operator je isti kao i za funkcije. U izvedenoj klasi bi imao isti operator kao i u osnovnoj, virtual char operator(), i imao bi i kod za taj operator, recimo nešto ovako:

Code:
char IzvedenaFigura::operator()
{
    return vrsta_figure;
}


Možda možeš da primetiš jednu malu nelogičnost u svemu ovome. Ovaj kod će biti identičan za svaku izvedenu figuru (ako su izvedene figure Pešak, Top, Skakač...). Nema logike da istovetan kod postoji na više mesta, već taj kod treba da bude u osnovnoj klasi, ali zadatak je tako postavljen da se čovek uhvati za glavu.

Uzgred, ovo "= 0" nije dovoljno, potrebno je i ono "virtual": virtual char operator() = 0

Imaš zarez viška posle definicije figure.
Re: Definisati apstraktnu klasu Figura (apstrakcija šahovskih figura)? 08.02.2010. u 12:42 · pre 203 meseca #7
Code:
#include <cstdlib>
#include <iostream>

using namespace std;

class Figura {
public:
    Figura(int r, int k)
    {
     red=r ;kolona=k;
    }

    virtual char operator ()()  = 0;

protected:
    int red,kolona,;
    char vrsta_figure;
};

class Top : public Figura {
public:
    Top(int r, int k) : Figura(r,k)
    {
    }

    char operator()()
    {
        return 'T';
    }

};

int main(int argc, char *argv[])
{
    Top t(2,3);
    cout << t() << endl;

    return EXIT_SUCCESS;
}
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Definisati apstraktnu klasu Figura (apstrakcija šahovskih figura)? 08.02.2010. u 13:18 · pre 203 meseca #9
Da se zadovolji postavka zadatka, koja je čudna. Ovo se rešava ili virtuelnom metodom bez atributa ili atributom koga postavlja konstruktor, a vraća nevirtuelna metoda.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme