C++基礎知識整理(関数編)

3597 ワード

一、マクロ関数(パラメータ付きマクロ定義)の欠陥:
  • 演算整合性の保証、増加()
  • カッコを付けて++--などの演算を渡す場合でも、エラーが発生する可能性があります(マクロ展開により+--などは一度だけ実行されません)
  • .
  • 役割ドメイン
  • を重視しない
    二、インライン関数:関数宣言または定義の前にキーワードinlineを付けてコンパイラにその関数を実現する目標コードをその関数を呼び出す文に挿入することを要求し、それによって関数呼び出し時の時間オーバーヘッドを解消し、運行速度を高め、空間交換時間を犠牲にする
  • クラスでメンバー関数を定義すると、その関数はキーワードinline
  • を追加することなく自動的にインライン関数となる.
  • 効率が高い条件:1インラインコンパイルは推奨性(registerキーワードのようにinlineはコマンドではなく要求にすぎない)であり、コンパイラによって決定される.2論理が簡単で、頻繁に呼び出される関数はインラインを使用することを提案する.③static変数を含む関数、再帰関数、ループまたはswitch、gotoを含む関数はインライン方式を使用できない.
  • #include 
    using namespace std;
    
    inline int getMax(int i,int j,int k)
    {
        int max=0;
        if(i>j)
            max = i;
        else if(k>j)
            max = k;
        else
            max = j;
        return max;
    }
    int main()
    {
        int a=10,b=20,c=30,n;       //    :   int a=10,b=20,c=30,n;
        n= getMax(a,b,c);           //             int i,j,k;
                                    //             i=a;j=b;k=c;
                                    //             if(i>j) n = i;
                                    //             else if(k>j) n = k;
                                    //             else n = j;
        cout << n << endl;          //             cout << n << endl;
        return 0;
    }

    三、関数のデフォルトパラメータ
  • は、関数プロトタイプにおいてパラメータにデフォルト値を付与することができ、デフォルトパラメータを構成する関数
  • を構成する.
  • 関数が呼び出されると、デフォルトの一部またはすべての実際のパラメータが許可され、コンパイラは自動的にデフォルト値を対応する実パラメータ値
  • として使用します.
  • 既存の関数に新しいパラメータを追加するには、既存のコードへの変更を減らすためにデフォルトパラメータに設定することができる
  • .
    #include 
    using namespace std;
    //void fun(int i,int j=6,int k);//  
    void fun(int i,int j=6,int k=8);//                        
    void fun(int i,int j,int k) //                (          ,          )
    {
        cout << i << j << k;
    }
    int main()
    {
     
        fun(20);    //   ,        ,        
        fun(20,30);
        fun(20,30,40);
        return 0;
    }
    

    四、関数の再ロード:C++は2つ以上の関数が同じ関数名を使用することを許可する
  • リロード関数には、異なるパラメータリストが必要です.すなわち、パラメータタイプ(順序を含む)が異なるか、個数が異なるか、個数タイプが異なるか、戻り値が異なる関数のみがリロード
  • を構成することができない.
  • リロード関数の役割ドメインは同じ
  • でなければなりません.
  • が関数パラメータとして参照する場合、constを加えてもconstを付けなくても重荷条件
  • を構成することができる.
  • 関数のリロードと関数のデフォルトパラメータが同時に存在する場合、二義性
  • を避けることに注意する.
    #include 
    using namespace std;
     
    int getMax(int i,int j,int k);             //     :->   getMax_int_int_int()
    double getMax(double i,double j,double k); //     :->   getMax_double_double_double()
     
    int getMax(int i,int j,int k)
    {
        int max=0;
        if(i>j)
            max = i;
        else if(k>j)
            max = k;
        else
            max = j;
        return max;
    }
    double getMax(double i,double j,double k)
    {
        double max=0;
        if(i>j)
            max = i;
        else if(k>j)
            max = k;
        else
            max = j;
        return max;
     
    }
    int main()
    {
        cout << getMax(2,3,6) << endl;
        cout << getMax(3.5,9.5,4.0) << endl;    //   ,         
     
        return 0;
    }
    
    /*
    
      :                 。
           ,      getMax(),       ,    :
    1、            ,    getMax() ,           。
    2、         getMax() ,              。
    
    */
    #include 
    using namespace std;
    /**
      *    :  a b    
      *a b     
      */
    int getMax(int a, int b)
    {
        return a > b ? a : b;
    }
    
    /**
      *     :         
      * arr:    
      * count:    
      *             
      */
    int getMax(int arr[],int count = 3)
    {
        //                 
        int a = arr[0];
    	for(int i = 1; i < count; i++)
    	{
            //             
    		if(a