Avatar billede krismort Nybegynder
18. august 2002 - 23:31 Der er 5 kommentarer og
1 løsning

virtual deklaration ?

Hvad betyder det at jeg deklarerer en funktion som virual i min klasse ?
FX:
class Allan
{
private:
    Allan(double Plastik);
    ~Allan();
    char Olsen[64];
public:
    virtual int Olsen(int type, DWORD grydeske);
};

Hvis jeg opretter 2 variabeler f.eks. :
char røvskæg[255];
Allan Guitar;
Fylder min Guitar med data, og udfører et reinterpret_cast fra guitar -> røvskæg[255].
Hvordan påvirker 'Olsen metoden' så mit resultat (røvskæg) nu da den er virtuel ?

Kristian
Avatar billede krismort Nybegynder
18. august 2002 - 23:34 #1
ups variablen 'char Olsen[64]' skulle ikke have heddet char Olsen[64] men Multiplex[64]! :p
Avatar billede jpk Nybegynder
19. august 2002 - 09:05 #2
Hvis du har 2 klasser, C1 og C2, hvor C2 er en nedarving af C1.

class C1
{
  C1();
  virtual void func();
}

class C2
{
  C2();
  void func();
}

Hvis så du laver en instans af C2 men via en pointer af class C1

C1* pC = new C2();

og kalder pC->func();

kaldes metoden i C2, IKKE metoden i C1!
Havde metoden i C1 ikke været virtual, var den blevet kaldt istedet...
Avatar billede krismort Nybegynder
19. august 2002 - 10:04 #3
Hvad betyder det hvis jeg gør sådan her ?
class C2 : public C1
{
  C2();
  void func();
}
Hvordan kommer det til at påvirke mine instanser af C2?
Avatar billede jpk Nybegynder
19. august 2002 - 10:15 #4
Undskyld, det var en trykfejl!
Som jeg skrev skulle C2 være en nedarving af C1, netop som i dit eksempel...
Avatar billede krismort Nybegynder
19. august 2002 - 10:18 #5
okay takker :)
Avatar billede soepro Nybegynder
19. august 2002 - 11:11 #6
Virtual = sen binding, dvs. udførsel af den variation af funktionen som er defineret højest oppe i dit klasse-hieraki, *UANSET* hvor langt nede i hierakiet kaldet bliver lavet.

Idden er at man i grundklassen kan udføre en funktion som kun vil kunne implementeres korrekt i de nedarvede klasser - det er det man fortæller med ordet virtual.

Forstil dig en grundklasse til behandling af tal - både reele og komplekse. En Add funktion i denne grundklasse vil ikke kunne implementeres korrekt, da Add jo ikke er det samme for et reelt tal og et komplekst tal. Men man kunne jo godt forestille sig at lave en funktion i grundklassen som fik brug for at Addere to tal - vha. den virtuelle Add metode. Funktionen i grundklassen kan så "kalde" den virtuelle Add - som så vil være en reel tals addering eller en addering af to komplekse tal, alt efter hvilken af de nedarvede klasser man rent faktisk havde instansieret.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester