можно ли наследовать реализацию интерфейса без его реализации для каждой реализации?Возможно ли наследовать реализацию интерфейса
В изображении выше IBase
и Ichild
классы, имеющие только чистые виртуальные методы и Base
реализует способы IBase
и Child
реализует методы IChild
. Возможно ли, чтобы Child
наследовал реализации методов IBase
через Base
, так что Child
не должен реализовывать эти методы самостоятельно?
Я пытался реализовать это следующим образом:
struct IBase {
virtual void do_something_Base() = 0;
};
struct IChild : public virtual IBase {
virtual void do_something_Child() = 0;
};
struct Base : public virtual IBase {
virtual void do_something_Base() { //implementation IBase method
//do sth
}
};
struct Child : public Base , public IChild {
virtual void do_something_Child() { //implementation IChild method
//do sth
}
};
int main() {
IBase* B = new Child;
B->do_something_Base();
delete B;
return 0;
}
Проблема с этим кодом является то, что copiler выдает предупреждение:
предупреждение C4250: 'Child': наследуется «Base :: Base :: do_something_Base 'через доминирование
Futhermore программа вылетает по линии delete B
. (Если я использую IChild* B
вместо IBase* B
программы не врезаться. Почему?)
Заранее спасибо
https://en.wikipedia.org/wiki/Virtual_inheritance –
Да, я знаю виртуальное наследование, но там компилятор дает предупреждение. В предупреждении говорится, что методы «IBase» наследуются доминированием. – Philinator
Если у вас есть ошибка кода, пожалуйста, ** ** отредактируйте свой вопрос с помощью [mcve] или [SSCCE (Short, Self Contained, Correct Example)] (http://sscce.org) – NathanOliver