2分でC++の3つの簡単な概念を復習します:リロード、再定義、書き換え

1838 ワード

3つの簡単な概念で、2分で復習します~
1、重荷
まず、リロードといえば、最も簡単で、C++のリロードとjavaの差は多くなく、いずれも1つのクラスで、メソッド名が同じでパラメータが異なるいくつかのメソッドですが、戻りタイプでは判断できません.例:
class AA
{
public:
    void print()
    {
        cout << "  " << endl;
    }
    void print(int x )
    {
        cout << "  :" << x  << endl;
    }
};

上の2つの方法はリロードに属します.
2、再定義
再定義(redefining)は非表示とも呼ばれます.
子クラスは、親クラスに同じ名前の非虚関数を再定義します(パラメータリストは異なる場合があります).
class AA
{
public:
    void print()
    {
        cout << "  " << endl;
    }
};
class BB : public AA
{
public:
    void print(int x)//     ,  A   print()   
    {
        cout << "  :" << x  << endl;
    }
};

void main()
{
    int x = 1;
    BB b; //  
    AA a; //  
    a.print();//     print()
    b.print(x);//     print()
    b.AA::print();//     print()
    //b.print();error:      
}

この場合print()とprint(int x)は再定義と呼ばれ、再定義時に親のprint()メソッドが隠され、親を使用する方法は::.
3、書き換え(上書きともいう)
関数の特徴は同じです.しかし具体的な実現は異なり,主に継承関係に現れる.他の人に良いクラスを提供する方法にあまり満足していない場合は、このクラスを継承してその方法を書き換えることで、必要な論理に変更することができます.
1、最も重要な点は、書き換えが子と親の間にあることです.
2、書き換えられた関数はstaticではありません.
3、関数三要素(関数名、関数パラメータ、関数戻りタイプ)はまったく同じ
4、親にvirtualキーワードがある場合、この親子の関係を虚関数書き換えと呼びます.これはC++のマルチステートメカニズムです.java自動変換とは異なり、C++は手動で設定する必要があります.
例:
class AA
{
public:
    virtual void print(int x )
    {
        cout << "  :" << x  << endl;
    }
};

class BB : public AA
{
public:
    virtual void print(int x)
    {
        cout << "  :" << x  << endl;
    }
};

int main()
{
    AA *p = NULL;
    BB b; 
    p = &b;
    p->print(1);
}

この出力結果は、AAクラスのvoid print(int x)関数の前にvirtualキーワードが追加されているかどうか、追加されている場合はサブクラスが呼び出され、そうでない場合は親に依存します.