Est-ce qu'un struct
ont un constructeur en C++ ?
J'ai essayé de résoudre ce problème mais je n'arrive pas à obtenir la syntaxe.
Est-ce qu'un struct
ont un constructeur en C++ ?
J'ai essayé de résoudre ce problème mais je n'arrive pas à obtenir la syntaxe.
Oui. Une structure est identique à une classe, mais elle a la valeur par défaut suivante public:
dans la définition de la classe et lors de l'héritage :
struct Foo
{
int bar;
Foo(void) :
bar(0)
{
}
}
En ce qui concerne votre autre question, je vous suggère de lire quelques tutoriels . Ils répondront à vos questions de manière plus rapide et plus complète que nous.
Notez qu'il existe une différence intéressante (au moins avec le compilateur MS C++) :
Si vous avez une structure ordinaire à la vanille comme celle-ci
struct MyStruct {
int id;
double x;
double y;
} MYSTRUCT;
alors quelque part ailleurs vous pourriez initialiser un tableau de tels objets comme ceci :
MYSTRUCT _pointList[] = {
{ 1, 1.0, 1.0 },
{ 2, 1.0, 2.0 },
{ 3, 2.0, 1.0 }
};
Cependant, dès que vous ajoutez un constructeur défini par l'utilisateur à MyStruct, comme ceux discutés ci-dessus, vous obtenez une erreur comme celle-ci :
'MyStruct' : Types with user defined constructors are not aggregate <file and line> : error C2552: '_pointList' : non-aggregates cannot be initialized with initializer list.
C'est donc au moins une autre différence entre une structure et une classe. Ce type d'initialisation n'est peut-être pas une bonne pratique OO, mais il apparaît partout dans le code c++ de l'ancien WinSDK dont je m'occupe. Pour votre information...
Cela semble être un comportement incorrect de la part du compilateur (en supposant que l'option class
déclare ses membres comme public
). MS dit "Visual C++ n'autorise pas les types de données dans un agrégat qui contient des constructeurs" mais n'indique pas pourquoi cela ne s'appliquerait pas également aux classes. Et cela semble fonctionner dans VS 2015.
Oui, les structures et les classes en C++ sont les mêmes, sauf que les membres des structures sont publics par défaut alors que les membres des classes sont privés par défaut. Tout ce que vous pouvez faire dans une classe, vous devriez pouvoir le faire dans une structure.
struct Foo
{
Foo()
{
// Initialize Foo
}
};
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.