#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;
}