[ fanfare @ 07.02.2010. 13:58 ] @
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; 
}; 



[Ovu poruku je menjao fanfare dana 07.02.2010. u 15:08 GMT+1]
[ mmix @ 07.02.2010. 14:15 ] @
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.
[ fanfare @ 07.02.2010. 15:14 ] @
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?
[ nnn @ 07.02.2010. 16:19 ] @
Moras da imas virtualenu metodu da bi ti klasa bila apstraktna..
[ fanfare @ 07.02.2010. 18:04 ] @
Pa zar operatorska funkcija kojom se preklapa operator() nije čisto virtuelna: char operator() =0; pa je samim tim i klasa apstraktna.?


[ Mihajlo Cvetanović @ 08.02.2010. 09:41 ] @
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.
[ Nedeljko @ 08.02.2010. 11:42 ] @
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;
}
[ Mihajlo Cvetanović @ 08.02.2010. 12:05 ] @
E da, ()().

A u ovom rešenju koja je uloga članice Figura::vrsta_figure?
[ Nedeljko @ 08.02.2010. 12:18 ] @
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.
[ fanfare @ 12.02.2010. 22:01 ] @
Citat:
Nedeljko:

virtual char operator ()() = 0;




Sada mi je uglavnom sve jasno ,osim: Zasto u cisto virtuelnoj funkciji stoji ()()?
[ Eurora3D Team @ 04.03.2010. 14:15 ] @
Citat:
fanfare: Sada mi je uglavnom sve jasno ,osim: Zasto u cisto virtuelnoj funkciji stoji ()()?

Zato sto je operator ()
Prvo () je operator a drugo () su zagrade funkcije