### 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)で呼び出す。