我仍然是C ++的新手(本学期开始),我目前正在设计一个程序,它使用我们迄今为止学到的所有内容。我决定以货运分拣和财务方面为基础,因为这也是我在大学之外的工作。
我遇到的问题是我当前的设计有三个子类,其中有完全相同的状态/行为(下面的推理),讲师说这不是他们想要的,因为它没有展示多态性的使用;我确实有另一个处理员工对象的层次结构。
类似的子类(satchel / carton / pallet)背后的想法是它们适用于不同尺寸的货物,因此在建造时将为它们计算出不同的每千克价值。因此,它们将各自具有不同的尺寸限制。这部分代码的基本运行时视图如下:
我的问题很有希望。是否存在因子类使用相同的状态/行为而导致的任何功能问题?
我意识到我可以将它们全部作为一个类,然后再计算价格,但我认为这需要更长的时间,因为它需要检查创建的每个货运对象。
感谢您的时间。
答案 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_;
}
在更复杂的系统中,您甚至可能希望将接口与基本实现分开。