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

时间:2015-03-29 13:21:57

标签: c++ object composition

提前感谢所有想要提供帮助的人 我想在主体中声明一个空对象,如下所示:
该对象具有原始字段和复合字段,都是私有的 * .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();"编译虽然我没有为任何
    分配默认值 字段也没有实现空构造函数,当我调试它时,编译器不会让我进入那一行,为什么会这样?

2 个答案:

答案 0 :(得分:0)

  
      
  1. 如何将默认值放入点?
  2.   

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

Rectangle ( double = 0, double = 0, Point = Point()
          , Point = Point(), Point = Point(), Point = Point())
  
      
  1. 不是那么相关的问题:当我在主要部分写作时,我注意到了   虽然我没有为任何人分配默认值,但我编译了Rectangle r1();   这些字段也没有实现空构造函数,当我调试它时,编译器不会让我进入那一行,为什么会这样?
  2.   

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

Rectangle r;

答案 1 :(得分:0)

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

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