C ++具有相同变量的多个子类

时间:2015-09-28 07:44:35

标签: c++ class state

我仍然是C ++的新手(本学期开始),我目前正在设计一个程序,它使用我们迄今为止学到的所有内容。我决定以货运分拣和财务方面为基础,因为这也是我在大学之外的工作。

我遇到的问题是我当前的设计有三个子类,其中有完全相同的状态/行为(下面的推理),讲师说这不是他们想要的,因为它没有展示多态性的使用;我确实有另一个处理员工对象的层次结构。

类似的子类(satchel / carton / pallet)背后的想法是它们适用于不同尺寸的货物,因此在建造时将为它们计算出不同的每千克价值。因此,它们将各自具有不同的尺寸限制。这部分代码的基本运行时视图如下:

  • 运行程序。
  • 调用的递归函数会询问用户是否要添加运费。
  • 如果是,功能要求L / W / H和重量测量,以及 地址等。
  • 函数然后调用satchel,carton或pallet构造函数 取决于给定的测量值。 (即如果重量超过40公斤 无论其他测量如何,它都会调用托盘。
  • 继续询问用户是否需要更多运费。如果是,则循环重复。
  • 如果没有它询问其他东西。

我的问题很有希望。是否存在因子类使用相同的状态/行为而导致的任何功能问题?

我意识到我可以将它们全部作为一个类,然后再计算价格,但我认为这需要更长的时间,因为它需要检查创建的每个货运对象。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

  

是否存在因子类使用相同状态/行为而导致的任何功能问题?

如果多次实现相同的功能,则在代码库增长时可能会很难维护。随着时间的推移,有人会通过改变三个计算中的一个来引入错误。这几乎是" Do not repeat yourself"。

的情况

你的讲师是对的:你的code不使用多态。为了练习使用多态,我希望在以下行中使用抽象基类:

class freight {
public:

  freight(const std::string& address, float weight)
    : address_(address)
    , weight_(weight)
  {}

  // do not forget the virtual dtor for polymorphic classes
  virtual ~freight() {}

  // subclasses might add more weight to the content
  virtual float weight() { return weight_; );

  virtual float cost()
  {
    return weight()*costPerKg();
  }

  virtual float costPerKg() = 0;
  virtual float length() = 0;
  virtual float height() = 0;
  virtual float width() = 0;

protected:
  std::string address_;
  float weight_;
}

在更复杂的系统中,您甚至可能希望将接口与基本实现分开。