2010-09-04 3 views
4

disons que j'ai une classe A et une classe B. B est utilisé comme membre dans A. B n'a pas de constructeur par défaut mais un qui nécessite un paramètre.C++ appelant un constructeur non-par défaut comme membre

class B { 
    B(int i) {} 
}; 


class A { 

B m_B; 

A() 
{ 
    m_B(17); //this gives an error 
} 

}; 

comment puis-je utiliser B en tant que membre A?

Répondre

13

Utiliser la liste d'initialisation.

class B { 
    public: 
    B(int i) {} 
}; 

class A { 
    B m_B; 
    public: 
    A() : m_B(17) {} 
}; 

BTW, pour réinitialiser m_B quelque part en dehors du constructeur, la syntaxe correcte est:

m_B = B(17); 
+0

Dans cet exemple, si cette dernière ligne 'm_B = B (17)' ont été appelés de la ' A() 'constructor, le constructeur par défaut de' B' est-il toujours invoqué? Si oui, y a-t-il un moyen d'empêcher cela? –

+0

@Steven: (1) Oui. (2) Utilisez la liste d'initialisation pour initialiser 'm_B'. – kennytm

Questions connexes