オブジェクト指向プログラミング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 を定義せよ。

国 名 列挙定数名
日 本
  kJapan
0
U S A
  kUSA
1
英 国
  kUK
2

【解説】
 世の中では,「整数値・通し番号・記号の列」などを使って「何か」を表す事がよくある。
これは主に「管理がしやすく」するためである。
例えば
 ・学籍番号 … 「情報太郎」君は「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;