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.Расширение интерфейсов с использованием наследования
UPDATE
То, что я хочу, чтобы IB
включить интерфейс IA
«s, следующим образом. Однако этот код не будет компилироваться, поскольку 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()
{
}
};
UPDATE 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()
{
}
};
'' IB' и IA' являются никоим образом не связаны с каждым other.It не трудно понять, что вы пытаетесь сделать с прохождением '' IB *, где функция ожидает ' IA * ' –
Почему вы не передаете' & b' прямо в 'f'? – unkulunkulu