我目前正在尝试提供多个头文件的实现。我尝试这样做:
// A.h:
class A {
public:
A();
~A();
bool method1();
bool method2();
}
// A.cpp:
A::A() {
}
A::~A() {
}
bool A::method1() {
}
bool A::method2() {
}
// B.h
class B : public A {
public B();
public ~B();
bool method1();
bool method2();
}
// B.cpp
B::B() {
}
B::~B() {
}
bool B::method1() {
// actual code I want to use
}
bool B::method2() {
// actual code I want to use
}
// AFactory.h
#define USE_B 10
#define USE_C 20
#define IMPL USE_B
class A;
class AFactory {
public:
static A *getImplementation();
}
// AFactory.cpp
A *AFactory::getImplementation() {
#if IMPL == USE_B
return new B();
#elif IMPL == USE_C
return new C();
#else
return NULL;
#endif
}
// Test.cpp
int main () {
A *test = AFactory::getImplementation();
test->method1();
test->method2();
}
这个想法是,提供A类的多个实现,只需更改define IMPL
的值即可切换。问题是,从未调用实际使用的实现B
中的方法。而是调用基类A
中的方法。我试图从构建中删除A.cpp completly,因为它从未使用过或者应该永远不会被使用,但是它不会构建,告诉我,我的测试代码中有未定义的引用。
答案 0 :(得分:2)
如果要覆盖这些方法,请使用virtual
关键字。
class A
{
virtual bool method1();
}
class B : public A
{
virtual bool method1(); // If you want to override the base functionality.
}