具有相同变量的 C++ 多个子类
C++ Multiple Subclasses with same Variables
我对 C++ 还是很陌生(从这个学期开始),目前正在设计一个程序,它会使用我们迄今为止所学的一切。我决定以货运分拣及其财务方面为基础,因为这也是我在大学以外的工作。
我遇到的问题是,我目前的设计有三个子class,它们内部的 states/behaviours 完全相同(推理如下),讲师说那不是不是他们想要的,因为它没有显示多态性的使用;我确实有另一个处理员工对象的层次结构。
类似子classes (satchel/carton/pallet) 背后的想法是它们适用于不同尺寸的货运,因此在当时为它们计算的每公斤价值不同建设。因此,它们各自会有不同的尺寸限制。这部分代码的基本运行时视图如下:
- 运行 程序。
- 调用递归函数询问用户是否要添加运费。
- 如果是,函数会要求 L/W/H 和体重测量值,以及
地址等
- 函数然后调用书包、纸箱或托盘构造函数
取决于给定的测量值。 (即如果重量超过 40 公斤
它调用 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_;
}
在更复杂的系统中,您甚至可能希望将接口与基本实现分开。
我对 C++ 还是很陌生(从这个学期开始),目前正在设计一个程序,它会使用我们迄今为止所学的一切。我决定以货运分拣及其财务方面为基础,因为这也是我在大学以外的工作。
我遇到的问题是,我目前的设计有三个子class,它们内部的 states/behaviours 完全相同(推理如下),讲师说那不是不是他们想要的,因为它没有显示多态性的使用;我确实有另一个处理员工对象的层次结构。
类似子classes (satchel/carton/pallet) 背后的想法是它们适用于不同尺寸的货运,因此在当时为它们计算的每公斤价值不同建设。因此,它们各自会有不同的尺寸限制。这部分代码的基本运行时视图如下:
- 运行 程序。
- 调用递归函数询问用户是否要添加运费。
- 如果是,函数会要求 L/W/H 和体重测量值,以及 地址等
- 函数然后调用书包、纸箱或托盘构造函数 取决于给定的测量值。 (即如果重量超过 40 公斤 它调用 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_;
}
在更复杂的系统中,您甚至可能希望将接口与基本实现分开。