Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Langage
Langage Langage C++, Programmation Orientée Objet, Templates, etc. Avant de poster : FAQ C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/12/2012, 12h40   #1
nosferatu
Invité de passage
 
Inscription : août 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 5
Points : 0
Points : 0
Par défaut Instanciation d'un objet avec un constructeur par défaut

Bonjour, et désolé à l'avance si la réponse se trouve dans la FAQ mais je n'ai pas trouvé de réponse satisfaisante à ma question en parcourant celle-ci.

Voici le problème, soit une classe A possédant un constructeur par défaut (sans argument) public, quelle est la différence entre les deux lignes de codes du main ?
Code :
1
2
3
4
5
6
7
8
9
10
11
class A { 
public : 
    A(){...} 
};
 
int main(){
A a;
A b();
 
return 0;
}
Après quelques tests, il semble que la seconde ligne (b) ne crée par vraiment d'objet de type A (le constructeur n'est pas invoqué) et b ne peux pas utiliser les méthodes de la classe A contrairement à l'objet a (GCC se plaint quand on essaie d'appeler une méthode à partir de b mais je ne comprend pas exactement ce qu'il dit : "erreur: request for member ‘func’ in ‘b’, which is of non-class type ‘A()’ ").

Ce qui me trouble particulièrement c'est que dans le cas d'une classe dont le constructeur requière des paramètres, le passage d'arguments est obligatoire et les parenthèses sont donc nécessaire...

S'il me semble claire que le premier objet (a) est bien un objet de type A, qu'est exactement b et que fait cette ligne de code ?

D'avance, merci
nosferatu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 12h47   #2
Arzar
Membre Expert
 
Inscription : mai 2008
Messages : 936
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 936
Points : 1 782
Points : 1 782
Bonjour,
Dans la première ligne tu instancies un objet a de type A. Le constructeur par défaut est appelé.
Dans la deuxième ligne tu déclares une fonction b() ne prenant aucun argument et renvoyant un objet de type A.
Arzar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 13h19   #3
nosferatu
Invité de passage
 
Inscription : août 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 5
Points : 0
Points : 0
Par défaut Merci

Arrrgg ! Quelle bêtises ! On peut déclarer des fonctions dans des fonctions ! j'avais oublié !

Merci !

Citation:
Envoyé par Arzar Voir le message
Bonjour,
Dans la première ligne tu instancies un objet a de type A. Le constructeur par défaut est appelé.
Dans la deuxième ligne tu déclares une fonction b() ne prenant aucun argument et renvoyant un objet de type A.
nosferatu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 14h05   #4
backlash
Membre habitué
 
Inscription : mars 2010
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 114
Points : 119
Points : 119
le lien vers l'entrée de la FAQ : http://cpp.developpez.com/faq/cpp/?p..._list_list_fct
backlash est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h01.


 
 
 
 
Partenaires

Hébergement Web