同じ関数名を持つ2つの基本クラスがあります。私はそれらの両方を継承し、それぞれの方法を異なる方法で乗り越えたいと思っています。(クラス定義で定義する代わりに)別々の宣言と定義でそれを行うにはどうすればよいですか?
#include <cstdio>
class Interface1{
public:
virtual void Name() = 0;
};
class Interface2
{
public:
virtual void Name() = 0;
};
class RealClass: public Interface1, public Interface2
{
public:
virtual void Interface1::Name()
{
printf("Interface1 OK?\n");
}
virtual void Interface2::Name()
{
printf("Interface2 OK?\n");
}
};
int main()
{
Interface1 *p = new RealClass();
p->Name();
Interface2 *q = reinterpret_cast<RealClass*>(p);
q->Name();
}
VC8で定義を移動できませんでした。私は、Microsoft固有のキーワード__interfaceがこの仕事をうまく行うことができることを発見しました、以下のコード:
#include <cstdio>
__interface Interface1{
virtual void Name() = 0;
};
__interface Interface2
{
virtual void Name() = 0;
};
class RealClass: public Interface1,
public Interface2
{
public:
virtual void Interface1::Name();
virtual void Interface2::Name();
};
void RealClass::Interface1::Name()
{
printf("Interface1 OK?\n");
}
void RealClass::Interface2::Name()
{
printf("Interface2 OK?\n");
}
int main()
{
Interface1 *p = new RealClass();
p->Name();
Interface2 *q = reinterpret_cast<RealClass*>(p);
q->Name();
}
しかし、他のコンパイラで機能する、より一般的なこれを行う別の方法はありますか?