constアプリケーション2

1554 ワード

前にconstに関する記事「constは小結を使う」をまとめましたが、ここで補足します.
 
1.constは、関数のリロードに使用できます.次の例のクラスメンバー関数:void out()およびvoid out()constを参照してください.
2.関数の後にconstについて、constの関数はデータメンバーを修正できないことを示します.
3.const関数では、そのデータメンバーを変更することはできませんが、ポインタメンバーの「データへの指向」を変更することができます.
4.constのオブジェクトは、const以外のメンバー関数を参照できません.次のconstオブジェクトはconst関数のみを呼び出します.
5.const定数の初期化は、コンストラクション関数の初期化リストでのみ初期化でき、コンストラクション関数内では初期化できません.
詳細は、コードを参照してください.
#include <iostream>
using namespace std;

class base
{
public:
   int *p_;
   int **pp_;
};

class derived:public base
{
    int num;
	const int num2;
	int *p_test;
public:
    derived():num2(10)//const                      
	{
        int a =10;
        num = a;
        p_test = &a;		
		
		p_ = new int;
        pp_ = &p_;	
    }
    void out()
	{
	    cout<<__LINE__<<": "<<__func__<<endl;
	    num++;
        cout<<"num = "<<num<<endl;	
    }
	//const      
    void out() const
	{
	    cout<<__LINE__<<": "<<__func__<<endl;
		//const        
	    //num++;
		
		int &a = **pp_;
		//            
        a = 20;
		cout<<"*p = "<<*p_<<endl;
		cout<<"**pp_ = "<<**pp_<<endl;
		
		//          
 		*p_test = 30;
		cout<<"*p_test = "<<*p_test<<endl;
    }
};

int main(int argc, char* argv[])
{
    derived d1;
    d1.out();
 	
    const derived d2;	
	//const   ,    const  。
    d2.out();
  	
    return 0;
}