私は基本クラスを持っています例:
class A {
public:
virtual void methodA(int) {}
virtual void methodA(int, int, int) {}
};
xcodeはmethodAが隠されているという警告を出します-すべてのsemは私が期待するように機能します(Aから派生したクラスはAポインターを介してアクセスでき、methodAのいずれかを使用できます)。
A
から派生したクラスの1つ(たとえばB
)は、のオーバーロードの1つのみをオーバーライドすると思いますmethodA()
。この場合、のその他のオーバーロードmethodA
はに隠されていB
ます。例:
class A {
public:
virtual void methodA(int) {}
virtual void methodA(int, int, int) {}
};
class B : public A {
public:
virtual void methodA(int) {}
};
int main()
{
A a;
B b;
A *pa = &b;
a.methodA(7); //OK
a.methodA(7, 7, 7); //OK
pa->methodA(7); //OK, calls B's implementation
pa->methodA(7, 7, 7); //OK, calls A's implementation
b.methodA(7); //OK
b.methodA(7, 7, 7); //compile error - B's methodA only accepts one int, not three.
}
using
解決策は、宣言をB
次のように追加することです。
class B : public A {
public:
using A::methodA; //bring all overloads of methodA into B's scope
virtual void methodA(int) {}
};