Constant 指定

Constant 変数, Constant 関数を使います。

前田稔の超初心者のプログラム入門

Static Constant 変数

  1. Object Class で、Constant 変数, Constant 関数を使ってみましょう。
    Constant は値を変更することが出来ない定数や、メンバ変数の値を変更することのない関数に使われます。
    C++ 言語仕様の中には、知らなくても支障が無い機能が沢山含まれています。
    中には何のためにわざわざこんな仕様を設けたのか理解に苦しむものも少なくありません。
    これもその内の一つでしょうか。 (^_^;)
  2. Static メンバ変数に Constant を設定します。
    PAI は円周率の定義で、DEGREE は度数法を弧度法に変換するときの定数(180)です。
    このあたりになるとコンパイラによって多少の違いがあるようなので留意して下さい。
        static const float  PAI;    //static 宣言
        static const float  DEGREE;
        
  3. PAI と DEGREE の実体は静的変数と同じように定義します。
    静的変数の説明は Class で静的変数を使う を参照して下さい。
        const float Cls::PAI = 3.14f;
        const float Cls::DEGREE = 180.0f;
        
  4. ソースコードです。
    /*★ static Const Data    前田 稔 ★*/
    #include <iostream>
    using namespace std;
    
    class Cls
    {
      public:
        static const float  PAI;    //static 宣言
        static const float  DEGREE;
    
        float radian(int k)
        {   return (float)k/DEGREE*PAI;
        }
    };
    //静的メンバ変数の実体となるグローバル変数
    const float Cls::PAI = 3.14f;
    const float Cls::DEGREE = 180.0f;
    
    void  main()
    {
        Cls     *cls = new Cls();
        int     k;
    
        for(k=45; k<=360; k+= 45)   cout << cls->radian(k) << endl;
        delete cls;
    }
    

通常の Constant 変数

  1. static で無い Constant 変数は、どこで値を設定するのでしょう。 (?_?;
    Constant 変数の値の設定は、メンバイニシャライザで行います。
    Cls Object Class のコンストラクタに「:」に続いて記述します。
    コンストラクタの中では何もすることが無いので「かっこ{}」だけ付けています。
    今の「しゃれ」解っていただけました? (^_^;)
    Cls() : PAI(3.14f), DEGREE(180.0f) {}
  2. あとは先のプログラムと同様です。
    プログラムを完成させて下さい。

Constant 関数

  1. メンバ関数にも Constant を指定することが出来ます。
    Const が指定されたメンバ関数内では、メンバ変数の値を変更することは出来ません。
    関数内で定義されたローカル変数は使えるようです。
    メンバ変数の値を表示する Disp() 関数に const を指定してみました。
    void Disp() const
  2. const の効果を調べるために Upd() 関数を定義してみました。
    const を指定するとコンパイルエラーになることを確認して下さい。
        //void  Upd(int Taijyu)  const
        void  Upd(int Taijyu)
        {
            taijyu = Taijyu;
        };
        
  3. ソースコードです。
    /*★ Const メンバ関数    前田 稔 ★*/
    #include <iostream>
    using namespace std;
    
    class Girl
    {
      private:
        int     nenrei;
        int     taijyu;
      public:
        char    namae[24];
        int     shintyo;
        Girl(char *Namae, int Nenrei, int Shintyo, int Taijyu)
        {   strcpy(namae,Namae);
            nenrei = Nenrei;
            shintyo = Shintyo;
            taijyu = Taijyu;
        }
        void  Disp()  const
        {
            cout << "名前=" << namae << "  年齢=" << nenrei <<
            "  身長=" << shintyo << "  体重=" << taijyu << endl;
        };
        //void  Upd(int Taijyu)  const
        void  Upd(int Taijyu)
        {
            taijyu = Taijyu;
        };
    };
    
    Girl    *cls;
    
    void  main()
    {
        cls = new Girl("愛知 真唯子", 22, 155, 56);
        cls->Disp();
        cls->Upd(54);
        cls->Disp();
        delete cls;
    }
    

超初心者のプログラム入門(C/C++)