class IA
{
public:
virtual void a() = 0;
};
class A: public IA
{
public:
virtual void a()
{
}
};
class IB
{
public:
virtual void b() = 0;
};
class B: public IB, public A
{
public:
virtual void b()
{
}
};
void f(IA* p)
{
}
int main()
{
B b = B();
IB* p = &b;
f(p);
}
これは、C ++で継承を使用してインターフェイスを実装する正しい方法ですか?もしそうなら、どのようにf(p);
コードの行をコンパイルするのですか?基本的にIB
は継承できればいいのですがIA
、Bに問題が発生します。
アップデート
私が欲しいのは、次のようにのインターフェースIB
を含めることです。IA
ただし、このコードはそれ以降コンパイルされIA::a()
ずA::a()
、互いに競合します。私は何をすべきか?
class IA
{
public:
virtual void a() = 0;
};
class A: public IA
{
public:
virtual void a()
{
}
};
class IB : public IA
{
public:
virtual void b() = 0;
};
class B: public IB, public A
{
public:
virtual void b()
{
}
};
更新2
これはコンパイルされますが、正しく見えますか?これらすべての仮想が必要ですか
class IA
{
public:
virtual void a() = 0;
};
class A: virtual public IA
{
public:
virtual void a()
{
}
};
class IB: virtual public IA
{
public:
virtual void b() = 0;
};
class B: virtual public IB, public A
{
public:
virtual void b()
{
}
};