我最近在使用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
更改为指针的情况下设置值并在构造函数体内分配其值?
答案 0 :(得分:3)
如果出于某种原因,您希望在构造函数的主体中分配m_z
而不是初始化它,那么您需要做两件事:
1)给Rect
一个默认构造函数。它需要它,因为m_z
将默认初始化。
2)因此分配:m_r = Rect(z,y);