Avatar billede danielhep Nybegynder
21. februar 2004 - 21:46 Der er 7 kommentarer og
1 løsning

virtual i classes

hej

I c++ når man programmere class´s ser men tit et ord som "virtuel".

Hvad er det ?

Mvh daniel
Avatar billede arne_v Ekspert
21. februar 2004 - 21:54 #1
virtual metoder er metoder hvor man kalder den metode der er i det
oprindeligt instantierede objekt og ikke metoden i det objekt man
står med.
Avatar billede arne_v Ekspert
21. februar 2004 - 21:56 #2
Sort snak ikke ?

Lad mig komme med et eksemepl !
Avatar billede danielhep Nybegynder
21. februar 2004 - 21:58 #3
kan du give et eksempel med noget kode ?
Avatar billede arne_v Ekspert
21. februar 2004 - 21:59 #4
#include <iostream>
#include <cstdlib>

using namespace std;

class P1
{
  public:
      void foobar();
};

class C1 : public P1
{
  public:
      void foobar();
};

class P2
{
  public:
      virtual void foobar();
};

class C2 : public P2
{
  public:
      virtual void foobar();
};

void P1::foobar()
{
  cout << "P1" << endl;
  return;
}

void C1::foobar()
{
  cout << "C1" << endl;
  return;
}

void P2::foobar()
{
  cout << "P2" << endl;
  return;
}

void C2::foobar()
{
  cout << "C2" << endl;
  return;
}

int main(int argc,char *argv[])
{
  P1 *p1 = new P1();
  p1->foobar();
  P2 *p2 = new P2();
  p2->foobar();
  C1 *c1 = new C1();
  c1->foobar();
  C2 *c2 = new C2();
  c2->foobar();
  P1 *m1 = new C1();
  m1->foobar();
  P2 *m2 = new C2();
  m2->foobar();
  exit(EXIT_SUCCESS);
}
Avatar billede arne_v Ekspert
21. februar 2004 - 22:00 #5
Output er:

P1
P2
C1
C2
P1
C2

De 4 første giver sig selv.

Pointen er de 2 sidste.  Det viser forskellen på ikke virtuel (1) og  virtuel (2).
Avatar billede arne_v Ekspert
21. februar 2004 - 22:02 #6
I Java er alle metoder automatisk virtual.

I C++ har programmøren selv valget.

Som hovedregel: hvis en metode påtænkes overridden i en sub klasse, så lav den
virtual. Man har så godt som aldrig brug for ikke virtuel funktionaliteten.

(det er iøvrigt også godt at lave sin destructor virtual hvis der skal
laves sub klasser)
Avatar billede arne_v Ekspert
21. februar 2004 - 22:02 #7
OK ?
Avatar billede danielhep Nybegynder
21. februar 2004 - 22:04 #8
Uha, det er lidt mere kompliseret end jeg havde regnet med...Yes det er helt ok...takker for hjælpen
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