はい。ただし、クラスの作成時に配列を動的に割り当てるか、配列を常に同じサイズにする必要があります。
オプション A:
class array{
private:
double* data;
unsigned size;
public:
array(double* d, unsigned s){
size = s;
data = new double[size];
for(unsigned i = 0; i < s; i++)
data[i]=d[i];
}
array(const array& copy){
double* temp = new double[copy.size];
delete [] data;
data = temp;
size = copy.size;
for(unsigned i = 0; i < size; i++)
temp[i]=copy.data[i];
}
array& operator= (const array& copy){
double* temp = new double[copy.size];
delete [] data;
data = temp;
size = copy.size;
for(unsigned i = 0; i < size; i++) data[i]=copy.data[i];
}
~array(){
delete[] data; // Don't forget the destructor!
}
};
これはおそらく必要な方法ですが、このクラスの複数のインスタンス間でメモリを共有しないように、ほぼ確実にカスタム コピー コンストラクターと代入演算子が必要になることに注意してください。より良い方法は、両方が使用できるコピー機能を作成することです。
オプション B:
class array{
private:
double data[3];
public:
array(double* d){ //or "double(&d)[3]" to be safer, but less flexible
for(unsigned i = 0; i < 3; i++){
data[i] = d[i]; // If d is not at least size 3, your program will crash here (or later on, or maybe just act in an undefined way)
}
}
}
これはテストしていませんが、出発点としては問題ありません。