我有一个顶级API(基于抽象类),它由基本API组成(将由不同的顶级API重用)。
class api_base {
public:
virtual int foo() = 0;
};
class api_top : public api_base {
public:
virtual int bar() = 0;
}
然后,我想提供基本API的基本实现:
class imp_base {
public:
int foo() { return 1; }
}
最后,使用基本实现为基本API中定义的那些功能实现顶级API:
class imp_top : public api_top, public imp_base {
public:
int bar() { return 1; }
}
当我实例化imp_top
类型的对象时,编译器会说该foo()
函数未实现。但这是不正确的,因为imp_top
从imp_base
确实foo()
实现了功能。
有什么建议吗?
先感谢您。
完整的测试代码:
#include <stdio.h>
class api_base {
public:
virtual int foo() = 0;
};
class api_top : public api_base {
public:
virtual int bar() = 0;
};
class imp_base {
public:
int foo() { printf("foo from imp_base\n"); }
};
class imp_top : public api_top, public imp_base {
public:
int bar() { printf("bar from imp_top\n"); }
};
int main()
{
printf("Hello\n");
imp_top a;
a.bar();
a.foo();
return 1;
}
编译结果:
test.cpp:26:12: error: cannot declare variable ‘a’ to be of abstract type ‘imp_top’
imp_top a;
^
test.cpp:18:7: note: because the following virtual functions are pure within ‘imp_top’:
class imp_top : public api_top, public imp_base {
^
test.cpp:5:17: note: virtual int api_base::foo()
virtual int foo() = 0;
^
test.cpp:29:6: error: request for member ‘foo’ is ambiguous
a.foo();
^
test.cpp:15:9: note: candidates are: int imp_base::foo()
int foo() { printf("foo from imp_base\n"); }
^
test.cpp:5:17: note: virtual int api_base::foo()
virtual int foo() = 0;
更改:
class api_top : public api_base
至 class api_top : public virtual api_base
和:
class imp_base
至 class imp_base : public virtual api_base
然后就可以了。
要了解这一点,请参阅:虚拟继承。是的(请参阅Ext3h的帖子),请使用override
关键字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句