提前感谢所有想要提供帮助的人
我想在主体中声明一个空对象,如下所示:
该对象具有原始字段和复合字段,都是私有的
* .h文件中构造函数的正确签名是什么?
例如,如果我有类Rectangle,它包含4个点(组合)中的高度和宽度字段,它将类似于:
#include "point.h" //Standard representation of a point
class Rectangle
{
private:
Point bRight, bLeft, uRight, uLeft;
double height, width;
public:
Rectangle(double, double, Point, Point, Point, Point)
... other not relevant functions
}
并在主要功能上:
#include "Point.h"
#include "Rectangle.h"
int main()
{
Rectangle r1(); //I want this row to invoke the constructor mantioned.
//above without implementing an empty one.
}
对于原始字段,它是安静的理解,您只需将默认值放在* .h文件的签名中 类似的东西:
Rectangle(double = 0, double = 0, Point, Point, Point, Point)
答案 0 :(得分:0)
- 如何将默认值放入点?
醇>
您可以按照评论中的说明进行操作:
Rectangle ( double = 0, double = 0, Point = Point()
, Point = Point(), Point = Point(), Point = Point())
- 不是那么相关的问题:当我在主要部分写作时,我注意到了 虽然我没有为任何人分配默认值,但我编译了
醇>Rectangle r1();
这些字段也没有实现空构造函数,当我调试它时,编译器不会让我进入那一行,为什么会这样?
它没有构建Rectangle
的实例,而是声明了一个函数。要使用默认构造函数构造Rectangle
,请省略括号:
Rectangle r;
答案 1 :(得分:0)
1)默认参数几乎可以是任何东西,它不需要是文字。如评论中所述,包括Point()
。
2)Rectangle r1();
将r1
声明为不带参数且返回Rectangle
的函数。那里没有初始化,那里没有可执行代码,所以没有什么可以介入。无法更改语言,以便Rectangle r1();
将r1
声明为对象。要将其声明为对象,但强制将其初始化而不管其类型如何,在当前标准中,您可以使用{}
而不是()
。较旧的编译器可能不支持此操作并将其视为语法错误。