
次のようなプログラムを作ろうとしています。
あるクラスComponentは
DIM(整数)次元(要素数)のdouble型配列と
ここで DIM は別のところでconstで宣言されています。
(他にもいくつか変数を持っているのですが話に関係ないので割愛します)
とりあえずこんな感じにしたいです。
class Component{
public:
double x[DIM];
Component(double x,double y,double z, ,,,,,); //コンストラクタ
}
ここでコンストラクタComponentは引数にDIM個の実数をとり、たとえば
DIM = 3のとき
Component obj(1.0,2.0,3.0);
と宣言したら
obj.x[0]=1.0
obj.x[1]=2.0
obj.x[2]=3.0
となるようにしたいのです。
むろん代入すること自体は代入すればよいのですが
外で宣言されているDIMによってコンストラクタの引数の数が変わってしまいます。
こういう時はどのような解決策があるでしょうか。
今書いたのと全然違うやり方でもかまいません。
(ただ何個も何個もコンストラクタをオーバーロードするのは避けたいです。
いろんなDIM次元で実験がしたく、きりがありません)。
よろしくお願いいたします!
No.2
- 回答日時:
こういうのは、
template <std::size_t DIM>
class Component
{
public:
template <class InputIterator>
Component(InputIterator first, InputIterator last);
...
};
とするのが常套手段ではないでしょうか?
そういうやりかたがあるのですか。
sizt_t DIMというのはどういう意味があるものなのでしょうか。
もう少し勉強が必要なようです。ありがとうございました!
No.1
- 回答日時:
引数の値はそれぞれ独立して渡す必要はありますか?
でなければ、あまりスマートとは言えませんが、
引数の要素は一旦配列に格納し、ポインタで配列の先頭アドレスと要素数を渡し、
コンストラクタ内で要素数分の領域を確保して引数で渡したポインタに紐漬けられた値を代入すればいいのでは?
ついでに要素数もメンバ変数に保存しておけば、以降のループ処理(あれば)のリミッタとしても使用できますよ。
あと、デストラクタでの領域解放は忘れずに。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 単振り子とルンゲ・タック法 1 2022/07/15 00:05
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Excel(エクセル) excel2013 色付きセルの値合計 3 2023/02/28 11:48
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
C# Listを使わずに2次元配列の...
-
先頭アドレスとは何ですか?
-
構造体とポインタ配列
-
C++ vectorに配列をプッシュしたい
-
メモリの初期値
-
C言語でのカンマ区切りについて
-
配列で格納したものをmsgboxで...
-
配列をEraseしてもメモリが開放...
-
mallocの確保要素数の限界は?
-
VBAで配列からbmp画像を出力す...
-
配列を使わずに、変数名を動的...
-
テキストファイルから文字列を...
-
ExcelVBAで質問です。離れた二...
-
Functionの戻り値を2次元配列...
-
VBからDLLへ多次元配列を渡す/...
-
自販機での金銭収受を想定した...
-
unsigned char の配列で途中で0...
-
多次元配列のポインタ渡し
-
VBでC言語のポインタみたい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
【速いブラインドタッチ】手を...
-
配列をEraseしてもメモリが開放...
-
テキストファイルから文字列を...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
複数の選択範囲の行番号を個別...
-
C# 配列の変数宣言について。
-
C++ vectorに配列をプッシュしたい
-
配列を含む構造体の初期値について
-
VBで構造体の配列を関数に渡す...
-
C言語で特定列だけを抽出して配...
-
キーボードのキー配列について
-
ExcelVBAで質問です。離れた二...
-
2次元配列を戻り値とする関数?
-
unsigned char配列への入力の仕方
-
【C言語】配列の中に配列を入れ...
-
Redimした動的配列はEraseする...
おすすめ情報