这是在C ++中实现组合的正确方法吗?

时间:2013-02-05 01:50:20

标签: c++ class design-patterns composition

胸部由宝藏组成 enter image description here
我用以下方式实现了它:

treasure.hpp

#pragma once
class Treasure{

    public:
    protected:
    private:

    //data members
    int gold;

};

chest.hpp

#pragma once
class Chest{

    private: 
    #include "treasure/treasure.hpp"

    public:
    protected:
    private:

    //data members
    Treasure treasure;

};

**假设两个头文件都使用相应的“.cpp”进行编译,以创建目标文件。*

在胸部的班级声明中包含宝藏的头文件是否合适?
这对我来说很有意义,因为我得到以下行为:
enter image description here
** Main无法创建或直接访问Treasure。*

#include "chest.hpp"

int main(int argc, char** argv){

    Chest chest;
}

我从未见过这种方式,所以我不确定这是不好的做法。

关于成分,首选哪种方法:

  1. 包括类声明前的标题;主要间接包括Treasure?
  2. 在类声明中私有包含标题,如上所示?

2 个答案:

答案 0 :(得分:3)

我会#include "treasure.hpp"Chest类声明之前位于top.hpp顶部。{并非所有宝藏都在胸前。如果main()想要创建一个不在Chest中的宝藏,则应该允许这样做。

另一方面,我当然可以想象私人课程有用的时间。在这种情况下,我会直接在外部类中编写私有类,而不是#include它。

答案 1 :(得分:1)

我会主要间接包含文件(珍宝包括在胸部的顶部)。拥有多个包含没有多大意义。实际上,这是那些预编译器指令的主要用途之一;防止因多次包含文件而导致的编译错误。

如果你这样做,你就不能做主要的事情;创造新的宝藏并将其添加到您的胸部或从您的胸部取出宝藏并独立工作。如果对象B仅由对象A使用,那么该实现才有意义。