Fredrik90 Skrevet 13. januar 2005 Del Skrevet 13. januar 2005 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? sikkert mye som kunne vært retta på. mvh. Fredrik. Lenke til kommentar
saboi Skrevet 13. januar 2005 Del Skrevet 13. januar 2005 (endret) struct A { A() { } }; struct B : A { A() : B() { } }; hvis du skal ha basepointers som egentlig er B* osv må du ha virtual destructor også Endret 13. januar 2005 av saboi Lenke til kommentar
søppel Skrevet 13. januar 2005 Del Skrevet 13. januar 2005 (endret) #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 13. januar 2005 av søppel Lenke til kommentar
kjetil7 Skrevet 13. januar 2005 Del Skrevet 13. januar 2005 (endret) 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 13. januar 2005 av kjetil7 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå