假设我有一个Shape对象,它有一个像这样的构造函数:
Shape( width, height, radius, depth )
现在,我只是有一个愚蠢的矩形,所以我不需要redius和深度......这样做是否可行
Shape myRect(50, 50, NULL, NULL) ?
我知道这不是最好的主意,我应该使用继承和东西,但这是一团糟,所以我可以像这样使用NULL吗?
答案 0 :(得分:3)
我可以像这样使用NULL吗?
没有。 NULL
是指针值。事实上,代码甚至可以编译(在C ++中),但它只会将值0
传递给int
参数,不是一个空指针,因为参数显然不是指针。
解决方案是提供一个只带两个参数的重载构造函数:
class Shape {
// Your “normal” constructor
Shape(int w, int h, int r, int d) {
// …
}
// Overload taking only two arguments
Shape(int w, int h) {
// …
}
};
并称之为:
Shape myrect(50, 50); // Calls second constructor.
当然,设计仍然会很糟糕,因为你已经注意到了自己。一个班级并不适合所有人。
答案 1 :(得分:3)
取决于半径和深度的类型。如果它们是整数,则必须使用超出范围的值(如-1)来表示“未设置”(如果以此方式声明,则越界也可以为0)。如果它们是指针,则可以使用NULL。
实际上你所描述的是坏继承的一个常见例子,它在OOP教学中用于说明为什么不应该继承所有内容。形状与此完全不同。
答案 2 :(得分:0)
这就是我所处的混乱
对这种混乱有一种对策,叫做重构。