C++ 列出具有私有成员的类的初始化
C++ 列出具有私有成员的类的初始化,c++,c++11,C++,C++11,std::vector允许如下所示的列表初始化: std::vector a = {1, 2, 3, 4}; 据我所知,std::vector的底层成员是私有的,您可以像a.data()一样访问数据数组,但实际成员是private。如果我错了,请告诉我 那么我如何在自己的课堂上模仿这个呢?我知道,如果您的会员是公众会员,您可以: class A { public: std::vector<int> a; std::map<int, int> b; };
std::vector
允许如下所示的列表初始化:
std::vector a = {1, 2, 3, 4};
据我所知,std::vector
的底层成员是私有的,您可以像a.data()
一样访问数据数组,但实际成员是private
。如果我错了,请告诉我
那么我如何在自己的课堂上模仿这个呢?我知道,如果您的会员是公众会员,您可以:
class A
{
public:
std::vector<int> a;
std::map<int, int> b;
};
A a = {{1, 2, 3, 4}, {{1, 2}, {3, 4}}};
或者这个:
LimitedLengthList a = {1, {1, 2, 3}};
如(参见ctor 7),您需要提供一个构造函数,该构造函数采用
差不多
class LimitedLengthList
{
public:
LimitedLengthList(std::initializer_list<T> init, int length = somedefaultval)
: maxLength(length), list(std::move(init)) {}
LimitedLengthList(int length) : maxLength(length){};
int operator[]
etc etc
private:
int maxLength;
std::vector<int> list;
};
class LimitedLengthList
{
公众:
LimitedLengthList(std::initializer_list init,int length=somedefaultval)
:maxLength(length),list(std::move(init)){
LimitedLengthList(int-length):maxLength(length){};
整数运算符[]
等等
私人:
int最大长度;
std::向量表;
};
与(参见ctor 7)类似,您需要提供一个采用
差不多
class LimitedLengthList
{
public:
LimitedLengthList(std::initializer_list<T> init, int length = somedefaultval)
: maxLength(length), list(std::move(init)) {}
LimitedLengthList(int length) : maxLength(length){};
int operator[]
etc etc
private:
int maxLength;
std::vector<int> list;
};
class LimitedLengthList
{
公众:
LimitedLengthList(std::initializer_list init,int length=somedefaultval)
:maxLength(length),list(std::move(init)){
LimitedLengthList(int-length):maxLength(length){};
整数运算符[]
等等
私人:
int最大长度;
std::向量表;
};
您可以执行以下操作:
LimitedLengthList(int length, std::vector<int> v) :
maxLength(length),
list(std::move(v))
{
if (list.size() >= maxLength) {
throw runtime_error("Bad size");
}
}
LimitedLengthList(整数长度,标准::向量v):
最大长度(长度),
列表(标准::移动(v))
{
if(list.size()>=maxLength){
抛出运行时_错误(“错误大小”);
}
}
所以limitedlengthlista={1,0,1,2}代码>将接受此构造函数
并为{0,1,2}
部分使用向量的初始值设定项列表构造函数。您可以执行以下操作:
LimitedLengthList(int length, std::vector<int> v) :
maxLength(length),
list(std::move(v))
{
if (list.size() >= maxLength) {
throw runtime_error("Bad size");
}
}
LimitedLengthList(整数长度,标准::向量v):
最大长度(长度),
列表(标准::移动(v))
{
if(list.size()>=maxLength){
抛出运行时_错误(“错误大小”);
}
}
所以limitedlengthlista={1,0,1,2}代码>将接受此构造函数
并为{0,1,2}
部分使用向量的初始值设定项列表构造函数。向量的初始化不是聚合初始化。它是列表初始化,使用一个构造函数获取一个std::initializer\u list
@T.C.就是这样,知道这会使我的研究更容易。vector
的初始化不是聚合初始化。这是列表初始化,使用构造函数获取std::initializer\u list
@T.C.就是这样,知道这会使我的研究更容易。我会按值而不是按常量ref获取v
,并执行list(std::move(v))
。我会按值而不是按常量ref获取v
,并执行list(std::move(v))
。