オブジェクト指向プログラミングa 2013年度定期試験対策要点解説 2. 定数 |
【リテラル定数】
●リテラル定数に関する教材資料はこちら。
■問題1
小文字の a をリテラル文字定数として書け。 |
解答例
'a'
■問題2
小文字の a だけからなるリテラル文字列定数として書け。 |
解答例
"a"
■問題3
数値 3 を実数型のリテラル定数として書け。 |
解答例
3.0または
3.
■問題4
数値 3 を整数型のリテラル定数として書け。 |
解答例
3
【const定数】
●const定数に関する教材資料はこちら。
■問題1
double型の値 3.141592 という値を持つ const 定数 pi を宣言せよ。 |
【解説】
初期値付きの変数宣言の前にというキーワードを付けると,その変数の値は
指定された初期値に固定されて変更できなくなる。これを,const定数と呼ぶ。
この問題では,円周率π(パイ,3.141592....)を pi という分かり易い名前
で使えるようにconst定数を宣言している。
【使用例】
const double pi = 3.141592; … 中略 … printf( "半径2.0の円の面積は%g\n", pi * 2.0 * 2.0 );
const double pi = 3.141592;
【列挙型と列挙定数】
●列挙型と列挙定数に関する教材資料はこちら。
■問題1
列挙型で国別コードを表したい。以下の定数を持つ列挙型 enum Country を定義せよ。
|
【解説】
世の中では,「整数値・通し番号・記号の列」などを使って「何か」を表す事がよくある。
これは主に「管理がしやすく」するためである。
例えば
・学籍番号 … 「情報太郎」君は「E12000ab」 ・出席番号 … 「環境花子」さんは出席番号「9」番 ・車のナンバープレート … 「情報太郎所有の自動車」は「千葉553 と 8888」 ・日本で出版されている本の出版コード … 「新版 明解C言語 入門編」は「ISBN978-4797327922」(いわゆるISBNコード) ・商品コード … 「eneloop-ニッケル水素電池-1本パック」は「HR-1UTG-1BP」 ・郵便番号 … 「千葉県千葉市若葉区御成台」は「265-0077」 ・国が定める都道府県コード … 「北海道」は「01」,「青森県」は「02」,… ,「千葉県」は「12」,… ,「沖縄県」は「47」 |
などなど。
このように,「整数値・通し番号・記号の列」などを使って「何か」を表す
ことを,「コード化」と呼ぶ。
プログラムでも,「整数」を使って「コード化」を行うことがよくある。
例えば
・文字コード(工業規格で決められてます) (1) ASCIIコード … 文字「5」は整数値「53」で表す,文字「A」は整数値「65」で表す,…,文字「z」は整数値「122」で表す。 (2) SHIFT-JISコード … 文字「あ」は整数値「33440」で表す,文字「情」は整数値「36846」で表す。 ・性別コード … 「男性」を「0」で表す,「女性」を「1」で表す。 ・ゲームの敵味方の識別コード … 「味方である事」を「0」,「敵である事」を「1」で表す。 |
など。
こういった,「整数」を使った「コード化」は,const定数を使っても行うこと
が出来る。
例えば,性別をコード化する場合は,
/* 参考)maleは男性,femaleは女性,genderは性別という意味の英単語。 */ /* 定数名の最初の一文字の k は,定数を表すドイツ語 konstant の頭文字で, その名前が定数名で有る事を表したいときに付けることが多い。 */ const int kMale = 0; /* 男性を表す定数kMale (値は整数値0) */ const int kFemale = 1; /* 女性を表す定数kFemale (値は整数値1) */ … int yourGender = kMale; … if( yourGender == kMale ) { /* 男性の場合の処理をここで行う */ printf( "あなたは男性です。\n" ); } else if( yourGender == kFemale ){ /* 女性の場合の処理をここで行う */ printf( "あなたは女性です。\n" ); } else { printf( "性別が正しく設定されていません。\n" ); }
というように書けないことは無い。しかし,この性別の例のように2種類ならまだ
簡単だが,数十種類以上になってくると const定数でコード化を行うことは大変に
なってくる。
そこで,C言語には「整数」を使った「コード化」に便利な,列挙型と列挙定数が
用意されている。列挙定数は,「定数を列べ挙げていく」形で定数を定義できる。
列挙定数の基礎
列挙型と列挙定数を使って,さきほどの性別の例を書き換えると以下の様になる。
enum Gender { kMale, /* 男性を表す定数kMale (値は整数値0) */ kFemale /* 女性を表す定数kFemale (値は整数値1) */ }; … enum Gender yourGender = kMale; … if( yourGender == kMale ) { /* 男性の場合の処理をここで行う */ printf( "あなたは男性です。\n" ); } else if( yourGender == kFemale ){ /* 女性の場合の処理をここで行う */ printf( "あなたは女性です。\n" ); } else { printf( "性別が正しく設定されていません。\n" ); }
enum Country { kJapan, kUSA, kUK };または
enum Country { kJapan = 0, kUSA = 1, kUK = 2 };
■問題2
上記問題1で定義した enum Country 型の変数 myCountry を初期値 kJapan で宣言せよ。 |
【問題に対する正解】
enum Country myCountry = kJapan;