Deklarovat a inicializovat pole struct / třídu zároveň

hlasů
3

1.

Já vím, že je možné inicializovat matici struktur v prohlášení. Například:

struct BusStruct
{
    string registration_number;
    string route;
};

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

Je-li struktura změnila na třídu, jako je tento:

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

Je možné udělat to samé jako pro strukturu (tj deklarovat a inicializovat matici tříd najednou)?

2. Mám pravdu, aby si myslí, že to není možné deklarovat a inicializovat vector<BusStruct>nebo vector<BusClass>ve stejnou dobu?

Položena 17/07/2009 v 16:33
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
3

Je možné udělat to samé jako pro strukturu (tj deklarovat a inicializovat matici tříd najednou)?

Ne, pokud si vytvořit vhodný konstruktor:

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

Nebo uděláte všichni členové veřejnosti a vynechat konstruktor, v takovém případě můžete použít stejnou syntaxi inicializační jako struct. Ale myslím, že to není to, co jste zamýšleli.

Mám pravdu, aby si myslí, že to není možné deklarovat a inicializovat vector<BusStruct>nebo vector<BusClass>ve stejnou dobu?

Ne to není možné s aktuálním C ++. Můžete však použít knihovny, které to umožní. Doporučuji Boost.Assign za to. K tomu je však vaše třída musí mít konstruktor, a stejně tak váš struct příliš - nebo je nutné vytvořit nějaký tovární funkce

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

Chcete-li udržet struct initializable s vzpěry přiložen seznam Inicializátor v ostatních případech.

Odpovězeno 17/07/2009 v 16:43
zdroj uživatelem

hlasů
1
  1. Ne, vy byste nebyli schopni inicializovat tříd, jak můžete s konstrukcí. Ale můžete psát třídy konstruktor uvnitř deklarace pole.
  2. C ++ nemá žádný postaven v cestě inicializaci vektorů, pokud chcete načíst vektor z matice, které jste inicializována.
Odpovězeno 17/07/2009 v 16:39
zdroj uživatelem

hlasů
0

C ++ nativně podporuje dvě formy vektoru inicializace a ani je to, co hledáte.

1: Každý prvek stejně jako v:

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

2: Kopírování z existujícího vektoru jako v:

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
Odpovězeno 17/07/2009 v 16:48
zdroj uživatelem

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