【发布时间】:2014-08-26 03:12:40
【问题描述】:
为什么这不起作用?继承的函数签名是否微妙地不正确,或者抽象基类是否在成员函数被继承“之前”强制执行,或者是其他什么?如果没有函数包装器,这是否可以被说服?
#include <iostream>
struct AbsBase {
virtual void foo() = 0;
virtual void bar() = 0;
};
struct ProvideFoo {
void foo() { std::cout << "foo\n"; }
};
struct ProvideBar {
void bar() { std::cout << "bar\n"; }
};
struct Concrete : public ProvideFoo, public ProvideBar, public AbsBase {
// I guess I could put function wrappers here... sigh...
//void bar() {ProvideBar::bar();}
//void foo() {ProvideFoo::foo();}
};
int main() {
Concrete c;
c.foo();
c.bar();
}
【问题讨论】:
-
继承不是这样工作的。
-
什么是“那个”?更正式地说,为什么编译器告诉我 Concrete 有一个纯虚拟成员,而不是告诉我多个基类包含该成员,这有帮助吗?
-
@Praxeolitic 您问题的措辞与您在此处展示的示例完全无关!没有任何 abstract :-/ ...
-
嗯? AbsBase 具有纯虚函数,因此是“抽象类”。
-
我真的不明白你为什么这么讨厌这个问题。
标签: c++ abstract-class multiple-inheritance mixins