![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.2ベストアンサー
- 回答日時:
クラス定義内でメンバの初期化は出来ません。
例外として static constの整数型メンバのみ初期化が認められていますが。
>引数なしのコンストラクタは呼び出せているようです。
勘違いです。
MyClassのコンストラクタが呼び出されるのはMainClassのコンストラクタ内です。
//MainClassのクラス定義
class MainClass
{
private:
MyClass myclass;
//…
};
//MainClassのコンストラクタ定義
MainClass::MainClass() : myclass(10,10)
{
//…
}
初期設定リスト「:myclass(10,10)」を指定しなければMyClassのデフォルトコンストラクタが暗黙に呼び出されます。
なお、MyClassのコンストラクタで引数に初期値を指定しておく手もあります。
MyClass {
public:
MyClass(int=10, int=10);
//…
};
この場合、MainClassのコンストラクタでmyclassの初期設定リストを省略しても所期の結果が得られます。
しかし、初期値を設定した場合でも初期設定を明示することをお勧めしますが。
この回答への補足
回答ありがとうございます。
納得できました。ということは、引数が違う物をいくつか作成する場合は、宣言以外のところでnewするか、セッターなどで設定するしかないということですか?
あとひとつ気になったのですが、
>static constの整数型メンバのみ初期化が認められています
とありますが、現在ヘッダファイルに2次元配列の変数を宣言してincludeしています。
array.h
int test[3][3]={{1,2,3},{1,2,3},{1,2,3}};
include "array.h"
class MainClass
{
private:
MyClass myclass;
//…
};
これだとMainClassの関数で自由にtest変数を使えるのですがこれは良くない方法なのでしょうか。
自分では、test[][]はメンバー変数で初期化しているつもりでしたが良く考えるとおかしいですね。
この変数はどんな扱いになっているのでしょうか?
No.3
- 回答日時:
>引数が違う物をいくつか作成する場合
ご質問の趣旨が分かりにくいです。
MainClass::myclaasの初期化に使う引数ということでしょうか?
それなら、1つの手としてはMainClassのコンストラクタにそのための引数を追加する方法がありますが。
MainClass::MainClass( int a, int b ) : myclass( a, b ) {}
>array.hについて
include指令は、そのファイルの内容を単純に挿入するだけです。
手作業でファイルの内容をコピー&ペーストするのとなんら変わりません。
No.2補足のコードなら、testはMainClassの外で、つまりグローバル変数として定義されてますね。
ヘッダファイル内でグローバル変数を定義するのは避けたほうがよろしいかと思います。
C++だとグローバル変数自体をあまり使いませんし。
回答、ありがとうございました。
MainClassで使うmyclassの変数が複数あり、それぞれの引数が異なる場合ということです。
myclassがひとつならその方法でできそうです。
クラスにもグローバル変数というのがあったのですね。
知りませんでした。
配列は100×100くらいの大きさなので、プログラムに直に書くのも大変なので、とりあえずはグローバルで扱っていこうと思います。そのうち、リソースにするか別ファイルに記載して読み込むようにしようと思います。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java final 1 2022/06/10 22:49
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
typedef enumの使い方を教えて...
-
visualstudio C# テキストボッ...
-
GCCで暗黙の型変換の警告を出し...
-
【#define】 defineで定義した...
-
エラー「invalid conversion fr...
-
0除算を判定したい
-
関数の実体定義にヘッダファイ...
-
構造体の宣言でエラーが出ます。
-
C言語における前置演算子と後...
-
プログラムの中で別のmainを呼...
-
main.c:7:43: warning: implici...
-
intとINTの違いは?
-
C言語でのフィボナッチ数列の表示
-
構造体の要素すべてに対する四...
-
変数の型を定義しなかった場合...
-
int main の前のint add(int a,...
-
ループを使用して変数に格納したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
typedef enumの使い方を教えて...
-
visualstudio C# テキストボッ...
-
C++のfor文について
-
関数の実体定義にヘッダファイ...
-
構造体の要素すべてに対する四...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
変数の型を定義しなかった場合...
-
intとINTの違いは?
-
main.c:7:43: warning: implici...
-
void func( void )について
-
C言語 宣言した変数になにも代...
-
【#define】 defineで定義した...
-
構造体の宣言でエラーが出ます。
-
C言語での方向キー入力判定
-
プログラムの中で別のmainを呼...
-
C言語について質問です。 子プ...
おすすめ情報