层次结构类依赖性

时间:2013-05-23 05:40:41

标签: c++ class-design

我想要一些关于课堂设计的建议。 假设我有3个班级"class A", "class B" and "class C"。 每个类都有不同的名称空间。 "A" has an instance of "B", and "B" has an instance of "C"。 每个类都有一个“struct Setting”,每个类都使用SetSettings()设置。 实际上,"A" uses "B" to do its job, and "B" uses "C" to do its job

我的问题是,有没有更好的方法来进行这些层次结构设置?

例如,to break the relation between "A" and "C", "B"可以使用"C::Settings"的相同参数,而不是定义c_settings ...

提前致谢!

A.H

#include "B.h"
namespace A {
struct Settings {
  int param_for_A_1;
  B::Settings b_settings;
};
class A {
  void SetSettings(const Settings& source) {
    settings_ = source;
    b_.SetSettings(source.b_settings);
  }
  Settings settings_;
  B::B b_;
};
}

B.h

#include "C.h"
namespace B {
struct Settings {
  int param_for_B_1;
  int param_for_A_2;
  C::Settings c_settings;
};
class B {
  void SetSettings(const Settings& source) {
    settings_ = source;
    c_.SetSettings(source.c_settings);
  }
  Settings settings_;
  C::C c_;
};
}

C.h

namespace C {
struct Settings {
  int param_for_C_1;
};
class C {
  void SetSettings(const Settings& source) {
    settings_ = source;
  }
  Settings settings_;
};
}    

的main.cpp

#include "A.h"
int main() {
  A::Settings settings;
  // Hierarchy settings...
  settings.param_for_A_1 = 1;
  settings.b_settings.param_for_B_1= 2;
  settings.b_settings.param_for_B_2 = 3;
  settings.b_settings.c_settings.param_for_C_1= 4;
  class A::A a;
  a_.SetSettings(settings);
  return;
}

1 个答案:

答案 0 :(得分:0)

截至目前,您确实没有使用继承,而是使用组合。组合意味着一个类具有另一个类的属性,而不是继承父类的函数和属性。

如果我想使用继承,我可能会使用C类作为B将继承的基础。然后A将继承自B.每个“代”都有自己的int属性对应于他们的“设置”。

根据具体情况,这可能更合适。