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

C++ Multiple Subclasses with same Variables

我对 C++ 还是很陌生(从这个学期开始),目前正在设计一个程序,它会使用我们迄今为止所学的一切。我决定以货运分拣及其财务方面为基础,因为这也是我在大学以外的工作。

我遇到的问题是,我目前的设计有三个子class,它们内部的 states/behaviours 完全相同(推理如下),讲师说那不是不是他们想要的,因为它没有显示多态性的使用;我确实有另一个处理员工对象的层次结构。

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

希望我的问题很简单。子class使用相同的states/behaviours是否有任何功能问题can/will?

我意识到我可以将它们全部作为一个 class,然后再计算价格,但我的印象是这需要更长的时间才能完成,因为它需要检查每笔运费已创建对象。

感谢您的宝贵时间。

Are there any functional problems that can/will be caused by having the subclasses using the same states/behaviours?

如果多次实现相同的功能,随着代码库的增长,维护起来可能会变得非常困难。随着时间的推移,有人会通过仅更改三个计算中的一个来引入错误。这几乎是“Do not repeat yourself”的情况。

您的讲师是对的:您的 code 没有使用多态性。为了练习多态性的使用,我希望在以下行中有一个抽象基数 class:

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_;
}

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