2012-01-16 9 views
-1

Lorsqu'un constructeur dans une super-classe reçoit des arguments, ce n'est plus un constructeur par défaut, n'est-ce pas? Par exempleC++, constructeur par défaut

class a { 
    public: 
     int a; 
     int b; 
     a(int c, int d){ 
     cout<<"hello"; 
     }; 
} 

Maintenant, lorsque je tente de faire une sous-classe, le programme provoque une erreur, il est dit « pas de constructeur par défaut est définie dans la classe super ». Comment puis-je résoudre ce problème? Je sais que si je supprime les arguments, tout ira bien, mais on me dit de ne pas le faire dans mon test C++. S'il vous plaît, aidez-moi à comprendre.

+0

Ceci est lié: http://stackoverflow.com/questions/5577663/about-base-class-in-derived-class -initialisation –

Répondre

2

Vous faites habituellement affaire avec cela avec une liste d'initialiseur:

#include <iostream> 

class a { 
public: 
    a(int c, int d) { std::cout << c << " " << d << "\n"; } 
}; 

class b : public a { 
public: 
    b() : a(1, 2) {} 
}; 

int main() { 
    b x; 
    return 0; 
} 
+0

Je ne suis pas autorisé à modifier codé, je viens d'ajouter des sous-classes supplémentaires pour cette super-classe. –

+0

Ceci n'implique pas de modifier la classe de base, seulement la ou les classe (s) dérivée (s). J'ai inclus une définition de classe de base ci-dessus uniquement pour la complétude, mais (par exemple) le 'b' donné ici devrait fonctionner avec le' a' que vous avez défini dans votre question. –

+0

Je l'ai essayé mais le studio visuel a souligné toute la ligne b(): a (1, 2) {}, –

2

Vous devez fournir un constructeur qui ne prend aucun argument vous-même.

a::a() 
{ 

} 

Une fois que vous fournissez un constructeur pour votre classe le compilateur ne génère pas le constructeur par défaut implicite qui ne prend aucun argument. Donc, si votre code a besoin d'un constructeur sans arguments, vous devrez le fournir vous-même.

+0

J'ai juste essayé mais ça m'a donné la même erreur + une nouvelle de a :: a() {}. Une idée? –

+0

S'il vous plaît poster votre code dans Question.Si vous montrez ce que vous avez essayé comment pouvez-vous être aidé? –

+0

On me donne un code, je n'ai pas le droit de le modifier. Ce que je suis invité à faire est d'ajouter deux sous-classes basées sur la super classe donnée, la classe est quelque chose comme ceci: class a { public: \t int x; \t chaîne h; \t a (int y, chaîne d) { \t \t y = 10; \t d = "Bonjour"; \t cout << y << endl << d; \t}; }; –

3

Si votre classe de base est pas par défaut constructible, ou si vous ne veulent utiliser le constructeur par défaut de la classe de base, puis il vous suffit de dire la classe dérivée comment construire la base sous-objet:

struct b : a 
{ 
    b(int n) : a(n, 2*n) { } 
    //   ^^^^^^^^^ <-- base class initializer, calls desired constructor 
}; 
Questions connexes