如何在构造函数中初始化类的成员数组
How to initialise a member array of class in the constructor?
我正在尝试执行以下操作:
class sig
{
public:
int p_list[4];
}
sig :: sig()
{
p_list[4] = {A, B, C, D};
}
我收到一个错误
构造函数中缺少表达式。
那么我该如何初始化数组呢?
仅在C++11中:
class sig
{
int p_list[4];
sig() : p_list { 1, 2, 3, 4 } { }
};
在11之前,除了块范围内的自动和静态数组或命名空间范围内的静态数组之外,不可能初始化其他数组。
那么我该如何初始化数组呢?
使用正常的初始化程序列表语法:
sig::sig() : p_list{1, 2, 3, 4}
{ }
注意,这只适用于C++11中。在此之前,您需要使用boost::array
并在函数中对其进行初始化。
如果编译器不支持C++11初始化,则必须分别分配每个字段:
p_list[0] = A;
p_list[1] = B;
p_list[2] = C;
p_list[3] = D;
如果您当前的编译器还不支持C++11,您可以使用标准算法和函数初始化向量内容:
class sig
{
public:
sig()
{
struct Functor
{
Functor() : value(0) {};
int operator ()() { return value++; };
int value;
};
std::generate(p_list, p_list + 4, Functor());
}
int p_list[4];
};
此处为上一个代码段示例。
是的,有点难看(至少对我来说,它看起来很难看),并且在编译时不做工作;但是它完成了构造函数中所需的工作。
如果你需要其他类型的初始化(用偶数/奇数初始化,用随机值初始化,从另一个值开始,等等…),你只需要更改Functor,这是这种丑陋方法的唯一优点。
您可以使用c++11编译器,使用-std=c++11或-std=gnu++11选项初始化数组成员
struct student {
private :
int marks[5];
public :
char name[30];
int rollno;
student(int arr[], const char *name, int rno):marks{arr[0], arr[1], arr[2], arr[3], arr[4]}{
strcpy(this->name, name);
this->rollno = rno;
}
void printInfo() {
cout <<"Name : "<<this->name<<endl;
cout <<"Roll No : "<<this->rollno<<endl;
for(int i=0; i< 5; i++ ) {
cout <<"marks : "<<marks[i]<<endl;
}
}
};
int main(int argc, char *argv[]) {
int arr[] = {40,50,55,60,46};
//this dynamic array passing is possible in c++11 so use option -std=c++11
struct student s1(new int[5]{40, 50, 55, 60, 46}, "Mayur", 56);
//can't access the private variable
//cout <<"Mark1 : "<<s1.marks[0]<<endl;
s1.printInfo();`enter code here`
}
p_list[4] = {'A', 'B', 'C', 'D'};
相关文章:
- 是否可以将结构数组别名为结构成员数组?
- C++:初始化 constexpr 构造函数中的成员数组
- 使用带有参数包的数组的成员数组初始化类
- C++ 在析构函数调用之前删除的动态成员数组
- 初始化在类类型 #define 中定义的非静态成员数组,不带默认 ctor
- 指向具有不同大小的成员数组的指针
- 用另一个 constexpr 数组对成员数组进行大括号初始化
- 对象成员数组C++默认初始化
- 如何在构造函数中的类成员数组中分配数组值,而无需使用STD库
- 将类成员数组组合到单个数组时性能下降
- 如何将数据从公共方法添加到同一类中的私有成员数组中?
- 如何在C 中的派生类中分配数据成员数组
- C 集合构建器中类成员数组的2D数组大小
- 初始化不可复制、不可移动、显式构造类型的成员数组
- C 指针可以指向字符串文字的静态成员数组
- 成员数组位于何处
- 将对象成员数组与字符串进行比较
- 如何在 c++ 中从对象数组中获取数据成员数组
- 声明模板会员参考另一个类的模板成员数组
- C 初始化成员数组