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

Defining constructor with default values to a composition object as a private field

本文关键字:对象 组合 字段 构造函数 默认值 定义      更新时间:2023-10-16

提前感谢所有提供帮助的人
我想在main中声明一个空对象,如下所示:
对象有基元字段和复合字段,它们都是私有的
*.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)
  1. 如何将默认值放入点
  2. 不那么相关的问题:我注意到,当我在主要
    "矩形r1();"虽然我没有为任何
    分配默认值,但它还是编译了也没有实现空构造函数,当我调试它时,编译器不允许我进入那一行,为什么
  1. 如何将默认值放入点

你可以按照评论中提到的那样做:

Rectangle ( double = 0, double = 0, Point = Point()
          , Point = Point(), Point = Point(), Point = Point())
  1. 不那么相关的问题:我注意到,当我在它编译了Rectangle r1();,尽管我没有为任何也没有实现空构造函数,当我调试它时,编译器不允许我进入那一行,为什么

它不是构造Rectangle的实例,而是声明一个函数。要使用默认构造函数构造Rectangle,请省略括号:

Rectangle r;

1)默认参数几乎可以是任何东西,不需要是文字。包括评论中提到的Point()

2) Rectangle r1();声明CCD_ 6为不带参数并返回CCD_。那里没有初始化,也没有可执行代码,所以没有什么可介入的。无法更改语言以使Rectangle r1();r1声明为对象。要将其声明为对象,但无论其类型如何都强制对其进行初始化,在当前标准中,可以使用{}而不是()。较旧的编译器可能不支持此操作,并将其视为语法错误。