在声明时使用 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}
    }
};

Demo