Erklære og initialisere en rekke struct / klasse samtidig

stemmer
3

1.

Jeg vet at det er mulig å initialisere en rekke strukturer i erklæringen. For eksempel:

struct BusStruct
{
    string registration_number;
    string route;
};

struct BusStruct BusDepot[] =
{
    { ED3280,    70 },
    { ED3536,    73 },
    { FP6583,    74A },
};

Hvis strukturen er endret til en klasse, som dette:

class BusClass
{
protected:
    string m_registration_number;
    string m_route;
public:
    // maybe some public functions to help initialisation
};

Er det mulig å gjøre det samme som for strukturen (dvs. erklære og initiere en rekke klasser på samme tid)?

2. Er jeg riktig å tenke at det ikke er mulig å erklære og initiere vector<BusStruct>eller vector<BusClass>samtidig?

Publisert på 17/07/2009 klokken 15:33
kilden bruker
På andre språk...                            


3 svar

stemmer
3

Er det mulig å gjøre det samme som for strukturen (dvs. erklære og initiere en rekke klasser på samme tid)?

Ikke med mindre du oppretter en passende konstruktør:

class BusClass
{
protected:
    string m_registration_number;
    string m_route;
public:
    // maybe some public functions to help initialisation
    // Indeed:
    BusClass(string const& registration_number, 
             string const& route)
    :m_registration_number(registration_number),
     m_route(route) { }
};

Eller du gjør alle medlemmer offentlig og utelate konstruktøren, og da kan du bruke den samme initialisering syntaks som for struct. Men jeg tror det er ikke hva du hadde tenkt.

Er jeg riktig å tenke at det ikke er mulig å erklære og initiere vector<BusStruct>eller vector<BusClass>samtidig?

Nei det er ikke mulig med dagens C ++. Du kan imidlertid bruke biblioteker som gjør dette mulig. Jeg anbefaler Boost.Assign for det. For det, men har din klasse skal ha en konstruktør, og likeledes din struct også - eller du trenger for å lage en slags fabrikk funksjon

BusStruct make_bus(string const& registration_number, 
                   string const& route) { ... }

Hvis du ønsker å beholde struct initializable med seler vedlagte initializer liste i andre tilfeller.

Svarte 17/07/2009 kl. 15:43
kilden bruker

stemmer
1
  1. Nei, du ville ikke være i stand til å initial klasser slik du kan med strukturer. Men du kan skrive klassen konstruktør inne i matrisen erklæring.
  2. C ++ har ingen innebygd i veien for initialisering vektorer, med mindre du ønsker å laste vektoren fra en matrise som du har initialisert.
Svarte 17/07/2009 kl. 15:39
kilden bruker

stemmer
0

C ++ støtter opprinnelig to former for vektor initialisering og det er heller ikke det du leter etter.

1: Hvert element det samme som i:

vector<int> ints(4,1000); //creates a vector of 4 ints, each value is 1000.

2: Kopier fra en eksisterende vektor som i:

vector<int> original(3,1000); //original vector has 3 values, all equal 1000.
vector<int> otherVector(original.begin(),original.end()); //otherVector has 3 values, copied from original vector
Svarte 17/07/2009 kl. 15:48
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more