¿Cómo se pueden inicializar los campos de clase?
-
16-09-2020 - |
Pregunta
un poco de una pregunta básica, pero tengo dificultades para rastrear una respuesta definitiva.
¿Es la forma inicializadora de la forma solo para inicializar los campos de clase en C ++, aparte de la asignación en los métodos?
En caso de que esté usando la terminología incorrecta, esto es lo que quiero decir:
class Test
{
public:
Test(): MyField(47) { } // acceptable
int MyField;
};
class Test
{
public:
int MyField = 47; // invalid: only static const integral data members allowed
};
Editar : En particular, ¿hay una buena manera de inicializar un campo de estructura con un inicializador de estructura?Por ejemplo:
struct MyStruct { int Number, const char* Text };
MyStruct struct1 = {}; // acceptable: zeroed
MyStruct struct2 = { 47, "Blah" } // acceptable
class MyClass
{
MyStruct struct3 = ??? // not acceptable
};
Solución
en C ++ X0 La segunda forma debería funcionar también.
¿Es la inicializadora enumera la única manera de inicializar los campos de clase en C ++?
En su caso con su compilador: si.
Otros consejos
Los miembros estáticos pueden ser inicializados de manera diferente:
class Test {
....
static int x;
};
int Test::x = 5;
No sé si llamas a esto 'NICE', pero puede inicializar a los miembros de la estructura de manera bastante limpia, así:
struct stype {
const char *str;
int val;
};
stype initialSVal = {
"hi",
7
};
class Test {
public:
Test(): s(initialSVal) {}
stype s;
};
Solo para mencionar que en algunos casos, no tiene más remedio que usar las listas de inicializador para establecer el valor de un miembro en la construcción:
class A
{
private:
int b;
const int c;
public:
A() :
b(1),
c(1)
{
// Here you could also do:
b = 1; // This would be a reassignation, not an initialization.
// But not:
c = 1; // You can't : c is a const member.
}
};
La forma recomendada y preferida es inicializar todos los campos en el constructor, exactamente como en su primer ejemplo.Esto es válido también para estructuras.Vea aquí: Inicialización de la estructura estática TM en una clase