Avatar billede krismort Nybegynder
03. september 2002 - 18:05 Der er 3 kommentarer og
2 løsninger

nedarvning af klasser ?

Hvordan nedarver jeg C1 i C2 når der findes argumenter i constructoren i C1?

class C1
{
public:
  int iID;
  C1(int ID)
  {
        iID=ID;
  };
};

class C2 : public C1(7,2)
{
};


Denne nedarvning virker tilsyneladede ikke, hvad gør jeg galt ?
Avatar billede krismort Nybegynder
03. september 2002 - 18:11 #1
class C2 : public C1(7)
{
};
Avatar billede Lasse Novice
03. september 2002 - 18:19 #2
du nedarver ikke paa basis af konstruktoren. Du nedarver bare klassen. I C2's konstruktor, kalder du saa din klasse C1's konstrukter eksplicit.
Avatar billede jpk Nybegynder
04. september 2002 - 08:18 #3
Du skal definere en ny constructor:

class C2 : public C1
{
  C2(int ID);
};

C2::C2(int ID)
: C1(ID)
{
}
Avatar billede soepro Nybegynder
04. september 2002 - 09:14 #4
Som jpk er inde på, er du nødt til at definere en constructor der tilvejebringer de værdier, som dinasis-klasse kræver.

Hvis du rent faktisk har brug for en nedarvet klasse, som ikke som udgangspunkt modtager en startværdi for grundklassens constructor, bør du ændre din grundklasse sådan at det direkte bliver muligt (underforstået tilladt !):

class C1
{
  public:
  int iID;
  C!(int i) { iID = i; };
  C1(void) { C1(0) };
};
class C2 : C1
{
  public:
  C2(int i) : C1(i) { };
  C2(void) : C1() { };
};
Avatar billede soepro Nybegynder
04. september 2002 - 09:17 #5
Overførsel af faste værdier sker i initializer listen til constructoren, alternativt ved direkte kald, men aldrig i selve klassedefinitionen som du har skrevet det. Følgende burde virke med din oprindelige definition:

class C2 : public C1
{
  public:
  C2() : C1(7) { };
};
};
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