在.cpp:C++在構造函數初始化數組
Person::Person(int _id[9], string name, int age) :_age(age), _name(name){};
的.H:
private:
int _id[9];
string _name;
int _age;
如何intilaze在我隨着年齡的增長也做了同樣的方法提交的 'ID' 和名稱?
在.cpp:C++在構造函數初始化數組
Person::Person(int _id[9], string name, int age) :_age(age), _name(name){};
的.H:
private:
int _id[9];
string _name;
int _age;
如何intilaze在我隨着年齡的增長也做了同樣的方法提交的 'ID' 和名稱?
class Person
{
typedef std::array<int, 9> ids_t;
Person(ids_t, string name, int age);
private:
ids_t _id;
string _name;
int _age;
};
Person::Person(ids_t id, string name, int age) : _id(id), _age(age), _name(name){}
既然你不能指定C風格的數組,甚至初始化一個與另外,您可以通過使用C++使任務更簡單 - 風格陣列(可分配並複製初始化):
array<int, 9> _id;
和
Person::Person(array<int, 9> id, string name, int age)
: _id(id), _age(age), _name(name) { }
或者,如果你堅持使用C數組,可以將參數數組成員數組與std::copy
複製:
Person::Person(int id[9], string name, int age) : _age(age), _name(name)
{
copy(id, id + 9, _id);
};
但請注意,傳遞C樣式數組是不好的,因爲編譯器將所有C樣式數組參數視爲指向數組第一個元素的指針。因此,id
參數的類型實際上是int*
,因此Person
構造的呼叫者可以通過(使用隱式array-to-pointer decay)的陣列任何尺寸,一個指針到只是一個單個int
,或甚至一個nullptr
,如展示了here。試圖從這些無效參數中複製9個元素將導致未定義的行爲。
陣列不具有拷貝構造,而且參數_id
在此構造
Person::Person(int _id[9], string name, int age) :_age(age), _name(name){};
隱式轉換爲指針傳遞作爲參數的陣列的第一個元素。這實際上是構造看起來像
Person::Person(int *_id, string name, int age) :_age(age), _name(name){};
和指針不留信息是否指向一個對象或數組的第一個對象。
所以你應該在這個參數後面附加一個參數來指定下層數組的大小,如果這樣的參數是paased的話。
例如
Person::Person(int *_id, size_t id_num, string name, int age)
:_id {}, _age(age), _name(name)
{
size_t size = id_num < 9 ? id_num : 9;
std::copy(_id, _id + size, this->_id);
}
相關/重複的:[?我如何通過一個數組來構造](http://stackoverflow.com/questions/9426932/how-do-i-pass-an -array-to-a-constructor) – NathanOliver
使用'std :: vector'或者'std :: array ' –
Casey