Imaginez que j'ai une classe C++ Foo et une classe Bar qui doivent être créées avec un constructeur dans lequel un pointeur Foo est passé, et ce pointeur est censé rester immuable dans le cycle de vie de l'instance Bar. Quelle est la bonne façon de procéder?
En fait, je pensais pouvoir écrire comme le code ci-dessous mais il ne compile pas ..
class Foo;
class Bar {
public:
Foo * const foo;
Bar(Foo* foo) {
this->foo = foo;
}
};
class Foo {
public:
int a;
};
Toute suggestion est la bienvenue.
Vous devez le faire dans une liste d'initialisation:
Bar(Foo* _foo) : foo(_foo) {
}
(Notez que j'ai renommé la variable entrante pour éviter toute confusion.)
Je crois que vous devez le faire dans un initialiseur. Par exemple:
Bar(Foo* foo) : foo(foo) {
}
En guise de remarque, si vous ne changerez jamais à quoi pointe foo, passez-le comme référence:
Foo& foo;
Bar(Foo& foo) : foo(foo) {
}
L'initialisation des membres const et d'autres cas spéciaux (telles que des classes parentes) peut être effectuée dans la liste d'initialisation
class Foo {
private:
const int data;
public:
Foo(int x) : data(x) {}
};
Ou, de même, pour l'initialisation des parents
class Foo {
private:
int data;
public:
Foo(int x) : data(x) {}
};
class Bar : Foo {
public:
Bar(int x) : Foo(x) {}
};
Vous devez initialiser foo dans la liste des initialiseurs.
class Bar {
Foo* const foo;
public:
Bar(Foo* f) : foo(f) {...}
};
Utilisez une référence:
Foo& foo;
Bar(Foo& f) : foo(f) { }
Vous pouvez ensuite vous référer facilement à foo
dans Bar
:
foo.doSomething();
essayez: Bar(Foo* xfoo) : foo(xfoo) {}