在构造函数中初始化对象成员

时间:2015-07-13 23:19:38

标签: c++

我最近在使用C ++编写类,我发现我无法在构造函数中初始化对象。让我解释一下:

class Rect {
public:
    Rect(float x, float y): m_x(x), m_y(y) {}
    float area() {return m_x*m_y;}
private: 
    float m_x;
    float m_y;
};

class Cube{
public:
    Cube(float x, float y, float z) {
        m_r = new Rect(z,y);  //This is not possible.. but why not?
        m_z = z;
    }
    float volume() {return m_r.area()*z;}
private:
    Rect m_r;
    float m_z;
};

要解决这个问题,我可以做到 Cube(float x, float y, float z) : m_r(x,y), m_z(z) {}或将m_r更改为指针,然后分配值 m_r = new Rect(x,y)如何在不将m_r更改为指针的情况下设置值并在构造函数体内分配其值?

1 个答案:

答案 0 :(得分:3)

如果出于某种原因,您希望在构造函数的主体中分配m_z而不是初始化它,那么您需要做两件事:

1)给Rect一个默认构造函数。它需要它,因为m_z将默认初始化。

2)因此分配:m_r = Rect(z,y);