Gå til innhold

Constructor med underklasse


Anbefalte innlegg

Hei.

 

Hvordan funker en constuctor når du har under klasser.

 

class A {
public:
 A(int a, int b, int c)

private:
 int a;
};

class test : public A {
public:
 test(int z, int x)

private:
 int x;
 int z;
};

 

hvis jeg nå skal definere constructoren for test, må jeg da lagge til A? :hmm:

 

sikkert mye som kunne vært retta på. :whistle:

 

mvh. Fredrik.

Lenke til kommentar
Videoannonse
Annonse

#include <iostream>

using namespace std;


class A {
public:
A()
{
 cout << "A() <= ";
} // constructor

A(int)
{  
 cout << "A(int) <= ";
} // constructor

A(int, int)
{
 cout << "A(double, double) <= ";
} // constructor

A(double)
{  
 cout << "A(double) <= ";
} // constructor

A(double, double)
{
 cout << "A(double, double) <= ";
} // constructor
}; // A


class B : public A {
public:
B()
{
 cout << "B()" << endl;
} // constructor

B(int)
{  
 cout << "B(int)" << endl;
} // constructor

B(int, int)
{
 cout << "B(int, int)" << endl;
} // constructor

B(double d)
 :A(d)
{  
 cout << "B(double)" << endl;
} // constructor

B(double d1, double d2)
 :A(d1, d2)
{
 cout << "B(double, double)" << endl;
} // constructor
}; // B


int main()
{
B b;
B bi1(1);
B bi2(1, 2);
B bd1(1.0);
B bd2(1.0, 2.0);
return(0);
} // main

 

Edit:

Alt annet enn den defaulte konstruktøren (den uten argumenter, i parent-klassen) må du eksplisitt spesifisere at skal kalles fra subklassen.

 

Edit2:

La til "piler" i koden ..

Endret av søppel
Lenke til kommentar

Dette er av erfaring en ganske vanlig feil mange uerfarne kodere gjør. Spesielt med copy c'tors.

 

Er kanskje verdt å nevne virtuelle c'tors og copy-c'tors også:

 

Et klassisk eksempel:

 

class shape
{
public:
   shape()
   {
   }

   shape(const shape & )
   {
   }

   // en virtuell c'tor
   virtual shape* create() const = 0; 
   
   // en virtuell copy-c'tor
   virtual shape* clone() const = 0;
};


class circle : public shape
{
public:
   circle()
   {
   }

   circle(const circle & ref) : shape(ref)
   {
   }

   virtual circle* create() const
   {
       return new circle();
   }

   virtual circle* clone() const
   {
       return new circle(*this);
   }
};


class rectangle : public shape
{
public:
   rectangle()
   {
   }

   rectangle(const rectangle & ref) : shape(ref)
   {
   }

   virtual rectangle* create() const
   {
       return new rectangle();
   }

   virtual rectangle* clone() const
   {
       return new rectangle(*this);
   }
};

 

Du kan selvfølgelig kalle clone() og create() hva du vil, men det er disse navnene som er vanlig å bruke og derfor bør du gjøre det også. Men jeg har sett noen kalle create() for construct(), men må si jeg foretrekker create():

Endret av kjetil7
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...