将具有默认值的构造函数定义为组合对象作为私有字段
Defining constructor with default values to a composition object as a private field
在此先感谢所有试图提供帮助的人。
我想在 main 中声明一个空对象如下:
对象有原始字段和复合字段,都是私有的。
*.h 文件中构造函数的正确签名是什么?
例如,如果我有 class 矩形,它包含 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)
- 如何将默认值放入积分中?
- 不是那么相关的问题:我注意到当我写在 main
"Rectangle r1();" 尽管我没有为任何值分配默认值,但它编译成功了
的字段也没有实现空构造函数,当我调试它时,编译器不会让我进入那一行,这是为什么?
- How can I put default values into the Points?
您可以按照评论中的说明进行操作:
Rectangle ( double = 0, double = 0, Point = Point()
, Point = Point(), Point = Point(), Point = Point())
- Not so related question: I've noticed that when I wrote in the main
Rectangle r1();
it compiled although I didn't assigned default values to any
of the fields nor implemented the empty constructor, and when I debugged it the compiler wouldn't let me step into that line, why is that?
它不是构造 Rectangle
的实例,而是声明一个函数。要使用默认构造函数构造 Rectangle
,请省略括号:
Rectangle r;
1) 默认参数几乎可以是任何东西,它不需要是文字。包括 Point()
,如评论中所述。
2) Rectangle r1();
将 r1
声明为不带参数并返回 Rectangle
的函数。那里没有初始化,那里没有可执行代码,所以没有什么可以进入的。无法更改语言以便 Rectangle r1();
将 r1
声明为对象。要将其声明为对象,但无论其类型如何都强制对其进行初始化,在当前标准中,您可以使用 {}
而不是 ()
。较旧的编译器可能不支持这一点并将其视为语法错误。
在此先感谢所有试图提供帮助的人。
我想在 main 中声明一个空对象如下:
对象有原始字段和复合字段,都是私有的。
*.h 文件中构造函数的正确签名是什么?
例如,如果我有 class 矩形,它包含 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)
- 如何将默认值放入积分中?
- 不是那么相关的问题:我注意到当我写在 main
"Rectangle r1();" 尽管我没有为任何值分配默认值,但它编译成功了
的字段也没有实现空构造函数,当我调试它时,编译器不会让我进入那一行,这是为什么?
- How can I put default values into the Points?
您可以按照评论中的说明进行操作:
Rectangle ( double = 0, double = 0, Point = Point()
, Point = Point(), Point = Point(), Point = Point())
- Not so related question: I've noticed that when I wrote in the main
Rectangle r1();
it compiled although I didn't assigned default values to any of the fields nor implemented the empty constructor, and when I debugged it the compiler wouldn't let me step into that line, why is that?
它不是构造 Rectangle
的实例,而是声明一个函数。要使用默认构造函数构造 Rectangle
,请省略括号:
Rectangle r;
1) 默认参数几乎可以是任何东西,它不需要是文字。包括 Point()
,如评论中所述。
2) Rectangle r1();
将 r1
声明为不带参数并返回 Rectangle
的函数。那里没有初始化,那里没有可执行代码,所以没有什么可以进入的。无法更改语言以便 Rectangle r1();
将 r1
声明为对象。要将其声明为对象,但无论其类型如何都强制对其进行初始化,在当前标准中,您可以使用 {}
而不是 ()
。较旧的编译器可能不支持这一点并将其视为语法错误。