我正在开发一个具有两个构造函数的类,它将使用不同的对象。如果我实例foo没有参数我想使用对象栏,如果我通过foo(val)实例我想使用对象baz。
我很困惑应该如何实施解决方案。继承似乎不那么合乎逻辑,因为bar和baz的函数和变量存在差异。
下面我介绍我的思考方式,基本上我是根据被调用的构造函数设置变量。然后在我的printWrapper上,我正在比较这个变量,知道我是否调用bar print或baz print。其中一个错误,是因为bar和baz只有带参数的构造函数。我想要的是当我使用/不使用参数实例foo时我不想创建对象bar / baz。你会怎么做?
Header foo.h
class foo {
public:
foo();
foo(int val)
private:
bool object_bar;
void printWrapper();
bar b; // instance used on constructor foo()
baz c; // instance used on constructor foo(val)
}
标题栏。
class bar {
public:
bar(int val)
private:
bool test1;
int test2;
void print();
}
标题baz.h
class baz {
public:
baz(int val)
private:
bool test1;
int test2;
int test3;
void print();
}
来源foo.cpp
foo::foo() : b(5) {
this->object_bar = true;
}
foo::foo(int val) : c(val) {
this->object_bar = false;
}
foo::printWrapper() {
if (true == this->object_bar)
b.print();
else
c.print();
}
答案 0 :(得分:0)
您可以使用指向基本抽象类的指针作为类Foo的私有成员。
然后让类Bar和Baz从这个基类继承。
然后在你的班级foo:
/* declaration of the base class in foo.h */
class Base;
class Foo
{
/* ... */
private:
Base *m_base;
};
和foo.cpp:
#include "base.h"
#include "bar.h"
#include "baz.h"
Foo::Foo() {
m_base = new Bar(5);
}
Foo::Foo(int val) {
m_base = new Baz(val);
}
/* ... */