C++ 未处理的异常,正在传递对象?
及 这两个都是类。 首先,我使用复制构造函数将类分数的分子设置为4,分母设置为1C++ 未处理的异常,正在传递对象?,c++,class,pointers,dynamic,C++,Class,Pointers,Dynamic,及 这两个都是类。 首先,我使用复制构造函数将类分数的分子设置为4,分母设置为1 然后我想把它(4,1)传递到我的类循环中,但是我通过调试器得到了这个未处理异常的错误,在下面的构造函数中,你没有给radius赋值 Fraction* fPtr = new Fraction(4, 1); Circle* cPtrA = new Circle(*fPtr); 有不同的选项,但如果您想在圆圈中复制分数,可以执行以下操作: Circle::Circle(Fraction& arg1) {
然后我想把它(4,1)传递到我的类循环中,但是我通过调试器得到了这个未处理异常的错误,在下面的构造函数中,你没有给radius赋值
Fraction* fPtr = new Fraction(4, 1);
Circle* cPtrA = new Circle(*fPtr);
有不同的选项,但如果您想在圆圈中复制分数
,可以执行以下操作:
Circle::Circle(Fraction& arg1) {
radius->setNum(arg1.getNum());
radius->setDenom(arg1.getDenom());
}
也许只存储对象的副本会更好
Circle::Circle(Fraction& arg1) : radius(new Fraction(arg1)) {
}
请注意,通过将参数设为const
引用,您可以向编译器和其他用户表明传递的分数不会被调用更改。在下面的构造函数中,您没有为radius
分配任何内容
Fraction* fPtr = new Fraction(4, 1);
Circle* cPtrA = new Circle(*fPtr);
有不同的选项,但如果您想在圆圈中复制分数
,可以执行以下操作:
Circle::Circle(Fraction& arg1) {
radius->setNum(arg1.getNum());
radius->setDenom(arg1.getDenom());
}
也许只存储对象的副本会更好
Circle::Circle(Fraction& arg1) : radius(new Fraction(arg1)) {
}
请注意,通过将参数设为const
引用,您可以向编译器和其他用户表明传递的分数不会被调用更改。您忘记了在复制构造函数和默认构造函数中初始化radius
。这会在尝试调用setNum
或setDenom
时导致异常。您可以通过为radius
分配分数来解决此问题,如下所示
class Circle {
public:
Circle();
Circle(const Fraction& arg1);
~Circle();
void print(void);
protected:
Fraction radius;
};
Circle::Circle(const Fraction& arg1) : radius(arg1)) {
}
惯用的做法是通过复制构造初始化radius
Circle::Circle() : radius(new Fraction())
{
radius->setNum(1);
radius->setDenom(1);
}
Circle::Circle(const Fraction &other) : radius(new Fraction())
{
radius->setNum(arg1.getNum());
radius->setDenom(arg1.getDenom());
}
记住删除析构函数中的对象
Circle::Circle(const Fraction &other) : radius(new Fraction(other))
{
}
您可以通过按值而不是指针存储radius
来消除分配。您忘记在复制构造函数和默认构造函数中初始化radius
。这会在尝试调用setNum
或setDenom
时导致异常。您可以通过为radius
分配分数来解决此问题,如下所示
class Circle {
public:
Circle();
Circle(const Fraction& arg1);
~Circle();
void print(void);
protected:
Fraction radius;
};
Circle::Circle(const Fraction& arg1) : radius(arg1)) {
}
惯用的做法是通过复制构造初始化radius
Circle::Circle() : radius(new Fraction())
{
radius->setNum(1);
radius->setDenom(1);
}
Circle::Circle(const Fraction &other) : radius(new Fraction())
{
radius->setNum(arg1.getNum());
radius->setDenom(arg1.getDenom());
}
记住删除析构函数中的对象
Circle::Circle(const Fraction &other) : radius(new Fraction(other))
{
}
您可以通过按值而不是指针存储radius
来消除分配。为什么radius
是指针?为什么radius
是指针?