C ++不同的构造函数使用不同的对象

时间:2018-04-05 16:54:29

标签: c++ oop constructor

我正在开发一个具有两个构造函数的类,它将使用不同的对象。如果我实例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();
    }

1 个答案:

答案 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);
}
/* ... */