Come possono essere inizializzati i campi di classe?
-
16-09-2020 - |
Domanda
Un po 'di una domanda di base, ma sto avendo difficoltà a rintracciare una risposta definitiva.
Inizializzatore sono elenchi di Inizializzatore il modo per inizializzare i campi di classe in C ++, a parte l'assegnazione dei metodi?
Nel caso in cui sto usando la terminologia sbagliata, ecco cosa intendo:
class Test
{
public:
Test(): MyField(47) { } // acceptable
int MyField;
};
class Test
{
public:
int MyField = 47; // invalid: only static const integral data members allowed
};
.
Modifica : In particolare, c'è un bel modo per inizializzare un campo Struct con un Iniziatore Struct?Ad esempio:
struct MyStruct { int Number, const char* Text };
MyStruct struct1 = {}; // acceptable: zeroed
MyStruct struct2 = { 47, "Blah" } // acceptable
class MyClass
{
MyStruct struct3 = ??? // not acceptable
};
. Soluzione
In C ++ X0 il secondo modo dovrebbe funzionare anche.
.Inizializzatore sono elencati l'unico modo per inizializzare i campi di classe in C ++?
Nel tuo caso con il tuo compilatore: sì.
Altri suggerimenti
I membri statici possono essere inizializzati in modo diverso:
class Test {
....
static int x;
};
int Test::x = 5;
.
Non so se chiami questo 'bello', ma puoi inizializzare i membri della struttura in modo abbastanza pulito come:
struct stype {
const char *str;
int val;
};
stype initialSVal = {
"hi",
7
};
class Test {
public:
Test(): s(initialSVal) {}
stype s;
};
. Solo per menzionare che in alcuni casi, non hai altra scelta che utilizzare gli elenchi di inizializzazione per impostare il valore di un membro sulla costruzione:
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.
}
};
. Il modo consigliato e preferito è di inizializzare tutti i campi nel costruttore, esattamente come nel tuo primo esempio.Questo è valido anche per strutture.Vedi qui: Inizializzazione della struttura statica TM in una classe