¿Cómo inicializar un campo const en el constructor?

Imagine que tengo una clase C ++ Foo y una barra de clases que debe crearse con un constructor en el que se pasa un puntero Foo, y este puntero debe permanecer inmutable en el ciclo de vida de la instancia de Bar. ¿Cuál es la forma correcta de hacerlo?

De hecho, pensé que podría escribir como el siguiente código pero no comstack …

class Foo; class Bar { public: Foo * const foo; Bar(Foo* foo) { this->foo = foo; } }; class Foo { public: int a; }; 

Cualquier sugerencia es bienvenida.

Debes hacerlo en una lista de inicializadores:

 Bar(Foo* _foo) : foo(_foo) { } 

(Tenga en cuenta que cambié el nombre de la variable entrante para evitar confusiones).

Creo que debes hacerlo en un inicializador. Por ejemplo:

 Bar(Foo* foo) : foo(foo) { } 

Como nota al margen, si nunca cambiará los puntos Foo en, póngalo como referencia:

 Foo& foo; Bar(Foo& foo) : foo(foo) { } 

La inicialización de miembros de const y otros casos especiales (tales clases de padres) se puede lograr en la lista de inicializadores

 class Foo { private: const int data; public: Foo(int x) : data(x) {} }; 

O, de manera similar, para la inicialización de los padres

 class Foo { private: int data; public: Foo(int x) : data(x) {} }; class Bar : Foo { public: Bar(int x) : Foo(x) {} }; 

Necesita inicializar foo en la lista de inicializadores.

 class Bar { Foo* const foo; public: Bar(Foo* f) : foo(f) {...} }; 

Use una referencia:

 Foo& foo; Bar(Foo& f) : foo(f) { } 

A continuación, puede consultar foo fácilmente en Bar :

 foo.doSomething(); 

Bar(Foo* xfoo) : foo(xfoo) {} : Bar(Foo* xfoo) : foo(xfoo) {}