我不能使用构造函数将NULL作为参数发送?

时间:2010-05-19 09:36:54

标签: c++

假设我有一个Shape对象,它有一个像这样的构造函数:

Shape( width, height, radius, depth )

现在,我只是有一个愚蠢的矩形,所以我不需要redius和深度......这样做是否可行

Shape myRect(50, 50, NULL, NULL) ?

我知道这不是最好的主意,我应该使用继承和东西,但这是一团糟,所以我可以像这样使用NULL吗?

3 个答案:

答案 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)

  

这就是我所处的混乱

对这种混乱有一种对策,叫做重构