C++-リロード、上書き、非表示

3365 ワード

一、重荷
同じクラスで発生し、同じクラスでメソッドAを定義した後、メソッドBを定義し、BとAのメソッド名は同じであるが、パラメータが異なる場合、さらにメソッドAをBと呼ぶ.
class test{

public:

    void A();

    void A(int);

}

二、カバー
子クラスと親クラスで発生し、親クラスでメソッドAが定義され、virtualタイプである.子クラスではメソッドAが再び定義され,パラメータは親クラスと同じである.これは,子の中のメソッドAが親の中のメソッドAを覆っているということである.
class base{

public:

    virtual void fun(int);

}



class d:public base{

public:

   void fun(int);

}

三、隠す
子クラスと親クラスで発生し,親クラスでメソッドAを定義すると,自クラスで再び同名のメソッドAを定義するが,パラメータが異なり,これは親クラスでのメソッドがブロックされる.
たとえば
class test{

public:

    void fun();

}



class d:public test{

public:

    void fun(int);

}
test * t = new d;

t->fun();//ok

t->fun(12);//error

つまり派生クラスのメソッドはベースクラスに呼び出されないに違いないが,これは実際には非表示とは関係なく,クラス継承と多態の効果にすぎない.
d dd;

d.fun();//error

d.fun(12);//ok

派生クラスによって親クラスを呼び出すという意味で、すでにブロックされている方法は、間違って報告されます.ここでいう隠しは、子クラスから親クラスの状況を見るということです.
上記の問題を解決する方法はusingを使うことです.
class d:public test{

public:

    ........

    using test:fun;

}