在声明时使用 val.Class 定义 class 对象的数组,在构造函数初始化列表中使用数组 & ptr 成员分配给成员数组
define array of class object at time of declaration with val.Class with array in constructor initializer list & ptr members assigned with member array
这是我的class
#include <iostream>
#include <string>
class abc{
private:
//int *px=x;
//int *py=y;
//int *pz=z;
public:
int x[10];
int y[10];
int z[10];
int *px=x;
int *py=y;
int *pz=z;
abc(const int _px[],int _py[],int _pz[]):x{{10}},y{{10}},z{{10}}
{
}
};
我想将 x,y,z 保密,
我喜欢做的是在 main 中我想声明和定义 abc
的数组并分配数组元素,所以在开始时定义它。我试过这样的东西
abc obj[5]={{{1,1,1},{2,2,2},{3,3,3}},{{...},...},.....}
so obj[0]->x[]={1,1,1}, obj[0]->y={2,2,2} obj[0]->z={3,3,3}
for abc obj[0]
但它没有编译。它只允许 abc obj[5]={/*not inner curly brackets values*/}
所以问题是如何在声明时给 obj 赋值(同时定义它)
如果以上不可能,那么如何通过 px、py、pz 指针分配给 x、y、z(为此我需要 memcpy 吗?但不知道该怎么做)
我也可以保留 x,y,z public
有了std::array
,你可能会
class abc{
public:
std::array<int, 10> x;
std::array<int, 10> y;
std::array<int, 10> z;
abc(const std::array<int, 10>& x,
const std::array<int, 10>& y,
const std::array<int, 10>& z) : x{x},y{y},z{z}
{}
private: // Not sure why you want those members :-/ Care with copy-constructor
int* px = x.data();
int* py = y.data();
int* pz = z.data();
};
用法类似于
abc obj[2] = {
{{1,1,1},{2,2,2},{3,3,3}},
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
}
};
这是我的class
#include <iostream>
#include <string>
class abc{
private:
//int *px=x;
//int *py=y;
//int *pz=z;
public:
int x[10];
int y[10];
int z[10];
int *px=x;
int *py=y;
int *pz=z;
abc(const int _px[],int _py[],int _pz[]):x{{10}},y{{10}},z{{10}}
{
}
};
我想将 x,y,z 保密,
我喜欢做的是在 main 中我想声明和定义 abc
的数组并分配数组元素,所以在开始时定义它。我试过这样的东西
abc obj[5]={{{1,1,1},{2,2,2},{3,3,3}},{{...},...},.....}
so obj[0]->x[]={1,1,1}, obj[0]->y={2,2,2} obj[0]->z={3,3,3}
for abc obj[0]
但它没有编译。它只允许 abc obj[5]={/*not inner curly brackets values*/}
所以问题是如何在声明时给 obj 赋值(同时定义它) 如果以上不可能,那么如何通过 px、py、pz 指针分配给 x、y、z(为此我需要 memcpy 吗?但不知道该怎么做)
我也可以保留 x,y,z public
有了std::array
,你可能会
class abc{
public:
std::array<int, 10> x;
std::array<int, 10> y;
std::array<int, 10> z;
abc(const std::array<int, 10>& x,
const std::array<int, 10>& y,
const std::array<int, 10>& z) : x{x},y{y},z{z}
{}
private: // Not sure why you want those members :-/ Care with copy-constructor
int* px = x.data();
int* py = y.data();
int* pz = z.data();
};
用法类似于
abc obj[2] = {
{{1,1,1},{2,2,2},{3,3,3}},
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
}
};