アフィリエイト広告を利用しています

広告

posted by fanblog

2017年09月17日

《その30》 列挙体(p.163演習4-12,p.165演習4-13)


新版明解C++入門編 p.162 List 4-17 のプログラムで、重要かなと個人的に思った箇所は つぎの2つです。

 @ while (type < Dog || type > Invalid);
 A animal_selected = static_cast<animal>(type);

 @ のポイントは、列挙体である animal型の Dog や Invalid を、そのままキャスト無しで 整数型である type と比較することができるということ。
 A のポイントは、列挙体 animal_selected = type; と書くことはできない点です。つまり、整数を列挙型へ代入するときにはキャストが必要だということです。

◆ 列挙型から整数への変換ではキャストが不要
◆ 整数から列挙型への変換ではキャストが必要



新版明解C++入門編 p.163 演習4-12
  トランプの記号(ダイヤ、ハート、クラブ、スペード)の四つの列挙子をもつ列挙体を定義せよ。各列挙子の値は、先頭から順に 0, 1, 2, 3 とし、List 4-17と同様にキーボードから値を読み込んで表示すること。

// p163_演習4-12
#include <iostream>
using namespace std;

int main()
{
enum suit { Diamond, Heart, Club, Spade };
int type;

do {
cout << "0…ダイヤ 1…ハート 2…クラブ 3…スペード : "; cin >> type;
} while (type < Diamond || type > Spade); // キャストが不要

suit selected = static_cast<suit>(type); // キャストが必要
switch (selected) {
case Diamond: cout << "ダイヤが好きです!\n" ; break;
case Heart: cout << "ハートが好きです!\n" ; break;
case Club: cout << "クラブが好きです!\n" ; break;
case Spade: cout << "スペードが好きです!\n"; break;
}
}

b04_12.png




新版明解C++入門編 p.165 演習4-13
  性別、季節、曜日などを表す列挙体を自由に定義し、それを用いたプログラムを作成せよ。

「自由に」ということなので、何月かを数字で入力すると その月の呼び名を 旧暦で表示するプログラムにしました。
最初に、名前のある普通の列挙体を使うプログラムを作って、次に、それを名前のない列挙体を使うプログラムに変更してみました。

// p165_演習4-13_1
#include <iostream>
using namespace std;

int main()
{
enum months { January = 1, February, March, April, May, June,
July, August, September, October, November, December};
int num;

do {
cout << "何月?:"; cin >> num;
} while (num < January || num > December);

months selected = static_cast<months>(num);
switch (selected) {
case January : cout << "睦月\n" ; break;
case February : cout << "如月\n" ; break;
case March : cout << "弥生\n" ; break;
case April : cout << "卯月\n" ; break;
case May : cout << "皐月\n" ; break;
case June : cout << "水無月\n" ; break;
case July : cout << "文月\n" ; break;
case August : cout << "葉月\n" ; break;
case September : cout << "長月\n" ; break;
case October : cout << "神無月\n" ; break;
case November : cout << "霜月\n" ; break;
case December : cout << "師走\n" ; break;
}
}

b04_13-1.png


次に、上のプログラムを 名前のない列挙体を使う形に変更してみました。

// p165_演習4-13_2
#include <iostream>
using namespace std;

int main()
{
enum /*months*/ { January = 1, February, March, April, May, June,
July, August, September, October, November, December};
int num;

do {
cout << "何月?:"; cin >> num;
} while (num < January || num > December);

// months selected = static_cast<months>(num);
// switch (selected) {

switch (num) {
case January : cout << "睦月\n" ; break;
case February : cout << "如月\n" ; break;
case March : cout << "弥生\n" ; break;
case April : cout << "卯月\n" ; break;
case May : cout << "皐月\n" ; break;
case June : cout << "水無月\n" ; break;
case July : cout << "文月\n" ; break;
case August : cout << "葉月\n" ; break;
case September : cout << "長月\n" ; break;
case October : cout << "神無月\n" ; break;
case November : cout << "霜月\n" ; break;
case December : cout << "師走\n" ; break;
}
}

b04_1322.png

新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6711412
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。