Principalement, bien que les struct
et typedef
ne soient pas nécessaires. Mieux écrit en C++ comme:
class Foo {
public:
Foo(Dog dog, Cat *cat) : d(dog), c(cat) {}
private:
Dog d;
Cat *c;
};
ligne par ligne:
class Foo {
La même chose que struct Foo
.La seule différence en C++ entre un class
et un struct
est que les membres de struct
sont publics par défaut, tandis que les membres de class
sont privés. Mais nous avons besoin de certains membres du public quelque part, donc nous vous débrouillez avec ...
public:
Tout après est public et peut être consulté par toute personne ayant un objet Foo
.
Foo(Dog dog, Cat *cat) : d(dog), c(cat) {}
Ceci est le constructeur de Foo. Il fait un nouvel objet Foo
, donné un Dog
et un Cat *
. Le : d(dog), c(cat)
est une liste d'initialisation. C'est le même que this->d = dog; this->c = cat;
, sauf probablement plus rapide. Si vous ne voulez pas le faire de cette façon, vous pouvez laisser le this->
à moins qu'il y ait un conflit de nommage quelque part. Le {}
est le corps de la fonction, vide car nous avons déplacé l'affectation vers la liste d'initialisation.
private:
En face de public:
. Les choses déclarées après cela ne sont accessibles que dans notre classe, et sont uniquement destinées à un usage interne.
Dog d;
Cat *c;
Ce sont des variables internes, comme les membres d'une struct
de la classe.
Ou mieux encore 'Foo (const chien et chien, chat * chat): d (chien), c (chat) {}' ... évite le surdébit d'instancier 'd' juste pour l'écraser avec un paramètre. Et passer par référence est moins cher et plus C++. –
@Travis: Je modifiais le code pour le faire pendant que vous ajoutiez votre commentaire. ':)' – sbi
@Travis - Pas de bébé. :) –