### typedef
typedefはint型やdouble型などの型に対して新しい名前をつけるためのキーワード
typedef unsigned long int Count; Count num = 1;
### enum
ユーザー定義型
enum Week{SUN, MON, TUE, WED, THU, FRI, SAT}; int main() { Week w; w = SUN; switch(w){ case SUN: cout << "日曜です。\n"; break; case MON: cout << "月曜です。\n"; break; case TUE: cout << "火曜です。\n"; break; case WED: cout << "水曜です。\n"; break; case THU: cout << "木曜です。\n"; break; case FRI: cout << "金曜です。\n"; break; case SAT: cout << "土曜です。\n"; break; default: cout << "何曜かわかりません。\n"; break; } return 0; }
### Structure data type(構造体)
struct Car { int num; double gas; }; int main() { Car car1; cout << "ナンバーを入力してください。\n"; cin >> car1.num; cout << "ガソリン量を入力してください。\n"; cin >> car1.gas; cout << "車のナンバーは" << car1.num << ":ガソリン量は" << car1.gas << "です。\n"; return 0; }
代入もできる
struct Car { int num; double gas; }; int main() { Car car1 = {1234, 25.5}; Car car2 = {4567, 52.2}; cout << "car1の車のナンバーは" << car1.num << ":ガソリン量は" << car1.gas << "です。\n"; cout << "car2の車のナンバーは" << car2.num << ":ガソリン量は" << car2.gas << "です。\n"; car2 = car1; cout << "car2の車のナンバーは" << car2.num << ":ガソリン量は" << car2.gas << "です。\n"; return 0; }
### 構造体の応用
struct Car { int num; double gas; }; void show(Car c); int main() { Car car1 = {0, 0.0}; cout << "ナンバーを入力してください。\n"; cin >> car1.num; cout << "ガソリン量を入力してください。\n"; cin >> car1.gas; show(car1); return 0; } void show(Car c){ cout << "車のナンバーは" << c.num << "ガソリン量は" << c.gas << "です。\n"; }
ポインタを使用する
struct Car { int num; double gas; }; void show(Car* pC); int main() { Car car1 = {0, 0.0}; cout << "ナンバーを入力してください。\n"; cin >> car1.num; cout << "ガソリン量を入力してください。\n"; cin >> car1.gas; show(&car1); return 0; } void show(Car* pC){ cout << "車のナンバーは" << pC->num << "ガソリン量は" << pC->gas << "です。\n"; }
※参照もできる
### Union data type(共用体)
同時に値を記憶できるのではなく、全体で1つしか値を記憶することができない
union Year { int ad; int gengo; }; int main() { Year myyear; cout << "西暦を入力してください。\n"; cin >> myyear.ad; cout << "西暦は" << myyear.ad << "です。\n"; cout << "元号も" << myyear.gengo << "です。\n"; return 0; }
### Practice
struct Person { int age; double weight; double height; }; int main() { Person person1, person2; cout << "年齢を入力してください。\n"; cin >> person1.age; cout << "体重を入力してください。\n"; cin >> person1.weight; cout << "身長を入力してください。\n"; cin >> person1.height; cout << "年齢を入力してください。\n"; cin >> person2.age; cout << "体重を入力してください。\n"; cin >> person2.weight; cout << "身長を入力してください。\n"; cin >> person2.height; cout << "年齢" << person1.age << "体重" << person1.weight << "身長" << person1.height << "\n"; cout << "年齢" << person2.age << "体重" << person2.weight << "身長" << person2.height << "\n"; return 0; }
↑同じ処理はfor文で回す
struct Person { int age; double weight; double height; }; void aging(Person* p); int main() { Person person1, person2; cout << "年齢を入力してください。\n"; cin >> person1.age; cout << "体重を入力してください。\n"; cin >> person1.weight; cout << "身長を入力してください。\n"; cin >> person1.height; cout << "年齢" << person1.age << "体重" << person1.weight << "身長" << person1.height << "\n"; aging(&person1); return 0; } void aging(Person* p) { cout << "1年経過しました。\n"; int a = p->age + 1; cout << "年齢" << a << "体重" << p->weight << "身長" << p->height << "\n"; }
ポインタで関数を呼び出す際は、入力時はアドレス(&person)で呼び出す。