構造体のように初期化する (非推奨)
#include <iostream>
using namespace std;
const int MAX_STR = 16;
class MyClass {
public:
int m_integer;
char m_str[MAX_STR + 1];
void Show();
};
void MyClass::Show() {
cout << "val1: " << m_integer << ", " // ← "" を並べると文字列結合されます (復習)
"val2: " << m_str << endl;
}
int main() {
MyClass obj[] = {
{ 1, "test1" },
{ 2, "test2" },
};
int size = sizeof obj / sizeof *obj;
for (int i = 0; i < size; ++i) {
obj[i].Show();
}
return 0;
}
コンストラクタで初期化する
#include <iostream>
using namespace std;
class MyClass {
int m_integer;
public:
void Show();
MyClass();
MyClass(int intval);
};
MyClass::MyClass() {
m_integer = 0;
}
MyClass::MyClass(int intval) {
m_integer = intval;
}
void MyClass::Show() {
cout << m_integer << endl;
}
int main() {
MyClass obj, obj2(1);
obj.Show();
obj2.Show();
// 配列を用意する場合
MyClass obj_list[] = {
MyClass(),
MyClass(1),
};
int size = sizeof obj_list / sizeof *obj_list;
for (int i = 0; i < size; ++i) {
obj_list[i].Show();
}
return 0;
}
既定値ありのコンストラクタで初期化する
コンストラクタの引数に既定値を設定した場合は、曖昧さ回避のため引数なしのコンストラクタは定義できなくなります。
#include <iostream>
using namespace std;
class MyClass {
int m_integer;
public:
void Show();
MyClass(int intval = 0);
};
MyClass::MyClass(int intval) {
m_integer = intval;
}
void MyClass::Show() {
cout << m_integer << endl;
}
int main() {
MyClass obj, obj2(1);
obj.Show();
obj2.Show();
return 0;
}
関数のデフォルト引数 (参考)
クラスとは関係ありませんが、既定値ありのコンストラクタと関連する事項のためここに記載します。関数にもデフォルト引数を設定することができます。ただし、クラスの場合と同様に二重定義の可能性があるオーバーロードはできません。
#include <iostream>
using namespace std;
int MyFunc(int arg1, int arg2 = 0); // プロトタイプ宣言がある場合、
// デフォルト引数はこちらにのみ書く。
int MyFunc(int arg1, int arg2) {
return arg1 + arg2;
}
// int MyFunc(int arg1) { // ← 二重定義となりエラーです。
// return arg1; // デフォルト引数による曖昧さ回避のため
// } // オーバーロードできません。
int main() {
cout << MyFunc(1) << endl; //=> 1
cout << MyFunc(1,1) << endl; //=> 2
return 0;
}
0
低レイヤーのプログラミングとOS開発が趣味。C言語を使っています。
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。



