variable validar validacion una inicializar hacer formas datos como codigo campos c++ constructor const ctor-initializer

validacion - validar campos en c++



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

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) { }

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 compila ...

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).


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) {}