eli yritän siis opetella loputkin asiat mitä en c++:sta tiedä(abstraktit luokat ja STL pääasiassa)
nyt kun yritin virtuaalifunktiota kokeilla, kääntäjä iski tällasta:
request for member `getX' in `testi', which is of non-class type `ukko ()()'
saman iskee kaikille muillekkin funktioille, paitsi muodostimelle
luokan koodi näyttää tältä:
class otus{//abstrakti käyttöliittymäluokka public: virtual int getX() = 0; virtual int getY() = 0; virtual void setX(int) = 0; virtual void setY(int) = 0; }; //ukko luokka class ukko : public otus{ private: int x; int y; public: ukko(); int getX(); int getY(); void setX(int a); void setY(int b); }; ukko::ukko(){ x = 0; y = 0; } int ukko::getX(){ return x; } int ukko::getY(){ return y; } void ukko::setX(int a){ x = a; } void ukko::setY(int b){ y = b; }
Ei kai se nyt sitä tuossa koodissa valita vaan jossain muualla. Anna mieluummin se rivi, jolla tuo virhe tulee.
Ei muuten ole järkevää laittaa virtuaalifunktioiksi tuollaisia perusasioita kuin GetX ja GetY, vaan ennemmin kannattaa jo siihen perusluokkaan ohjelmoida välttämättömät ominaisuudet kuten sijainti.
Virtuaalisia funktioita sisältäville luokille on ehdottomasti syytä määritellä myös virtuaalinen tuhoaja (destructor, ~luokka), ettei tapahdu kummia.
cout<<endl<<"ukko sijaitsee at point ("<<testi.getX()<<","<<testi.getY()<<")\n";
No miten tuo "testi" on luotu?
no just..
ukko testi();
eli aivan päin mäntyä..
ja tietenkin se oli se kaikista selvin asia mitä en sitte huomannu..
kiitoksia kuitenkin, toi vika kysymys täräytti oikean vastauksen aika tehokkaasti.. en olis muute varmaa huomannu kattoo ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.