将具有默认值的构造函数定义为组合对象作为私有字段

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)
  1. 如何将默认值放入积分中?
  2. 不是那么相关的问题:我注意到当我写在 main
    "Rectangle r1();" 尽管我没有为任何值分配默认值,但它编译成功了
    的字段也没有实现空构造函数,当我调试它时,编译器不会让我进入那一行,这是为什么?
  1. How can I put default values into the Points?

您可以按照评论中的说明进行操作:

Rectangle ( double = 0, double = 0, Point = Point()
          , Point = Point(), Point = Point(), Point = Point())
  1. 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 声明为对象。要将其声明为对象,但无论其类型如何都强制对其进行初始化,在当前标准中,您可以使用 {} 而不是 ()。较旧的编译器可能不支持这一点并将其视为语法错误。