好的 C++ 新手,我非常了解 Java,现在正在尝试学习 C++。无论如何,这是我的简单课程。
class PolyGon{
private:
PointArray aArray;
static int numberOfInst;
public:
PolyGon(Point point[], const int newSize) : aArray(point, newSize){}
};
这很好。如果我错了,请纠正我,但在初始化列表aArray(point, newSize)
中相当于aArray = new PointArray(point, newSize)
.
因为当我尝试完全相同的代码但将最后一行更改为:
class PolyGon{
private:
PointArray aArray;
static int numberOfInst;
public:
PolyGon(Point point[], const int newSize){aArray = new PointArray(point, newSize)}
};
这给出了例外:
'((PolyGon*)this)->PolyGon::aArray = (((PointArray*)operator new(8u)), (->PointArray::PointArray(((const Point*)) 中的 'operator=' 不匹配点), newSize), ))'|
如果您想在这里查看 PointArray 的构造函数,它是:
PointArray::PointArray(const Point points[], const int newSize)
{
size = newSize;
x = new Point[size];
for(int i = 0; i < size; i++)
{
x[i] = points[i];
}
}
好的,在我提交之前,我找到了一个答案,如果对象没有默认构造函数,则必须使用初始化器列表对其进行初始化。我现在有三个问题:
- 为什么是这样?为什么我不能按照我想要的方式去做。
- 此规则是否仅适用于构造函数。就像我可以说“PointArray aArray = new PointArray(point, newSize);” 别的地方?
- 我确实有一个无参数构造函数。那么为什么它给我这个错误呢?
我的无参数构造函数如下所示:
PointArray(){size = 0; x = new Point[0];}