
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
構造体の要素すべてに対する四...
-
識別子が定義されていませんと...
-
visualstudio C# テキストボッ...
-
2重定義って??
-
DLLのLPSTR 項目の戻り値の取得...
-
変数の型を定義しなかった場合...
-
struct tanka_kosuu の同じ構...
-
intとINTの違いは?
-
フィボナッチ数列 c言語
-
戻り値の型??
-
0除算を判定したい
-
分割コンパイル時に構造体....
-
sshdログの意味
-
配列を用いない最大値の求め方
-
enumについて
-
C++でboolにintの値を代入する...
-
C++ クラスをメンバにもつクラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
main.c:7:43: warning: implici...
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
visualstudio C# テキストボッ...
-
2重定義って??
-
C++のfor文について
-
C++でboolにintの値を代入する...
-
構造体の要素すべてに対する四...
-
変数の型を定義しなかった場合...
-
C言語のコンパイルエラー
-
プログラムの中で別のmainを呼...
-
typedef enumの使い方を教えて...
-
intとINTの違いは?
-
構造体の宣言でエラーが出ます。
-
ハンドルされていない例外が発...
-
【#define】 defineで定義した...
-
enumについて
-
GCCで暗黙の型変換の警告を出し...
-
C言語 宣言した変数になにも代...
-
void func( void )について
おすすめ情報