C++-リロード、上書き、非表示
3365 ワード
一、重荷
同じクラスで発生し、同じクラスでメソッドAを定義した後、メソッドBを定義し、BとAのメソッド名は同じであるが、パラメータが異なる場合、さらにメソッドAをBと呼ぶ.
二、カバー
子クラスと親クラスで発生し、親クラスでメソッドAが定義され、virtualタイプである.子クラスではメソッドAが再び定義され,パラメータは親クラスと同じである.これは,子の中のメソッドAが親の中のメソッドAを覆っているということである.
三、隠す
子クラスと親クラスで発生し,親クラスでメソッドAを定義すると,自クラスで再び同名のメソッドAを定義するが,パラメータが異なり,これは親クラスでのメソッドがブロックされる.
たとえば
つまり派生クラスのメソッドはベースクラスに呼び出されないに違いないが,これは実際には非表示とは関係なく,クラス継承と多態の効果にすぎない.
派生クラスによって親クラスを呼び出すという意味で、すでにブロックされている方法は、間違って報告されます.ここでいう隠しは、子クラスから親クラスの状況を見るということです.
上記の問題を解決する方法はusingを使うことです.
同じクラスで発生し、同じクラスでメソッド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;
}