gpt4 book ai didi

c++ - 未处理的异常,传递对象?

转载 作者:行者123 更新时间:2023-11-28 00:44:57 25 4
gpt4 key购买 nike

class Fraction {
public:
Fraction();
Fraction(int);
Fraction(int, int);
~Fraction();
void setNum(int);
void setDenom(int);
int getNum(void) const;
int getDenom(void) const;
void print(void);
private:
int num;
int denom;
};

class Circle {
public:
Circle();
Circle(Fraction& arg1);
~Circle();
void print(void);
protected:
Fraction *radius;
};

#include "Fraction.h"
#include "Circle.h"
#include <iostream>
using namespace std;

Fraction::Fraction() {
num = 0;
denom = 1;
}
Fraction::Fraction(int n, int d) {
num = n;
denom = d;
}
Fraction& Fraction::operator=(const Fraction& arg) {
num = arg.num;
denom = arg.denom;
return *this;
}
Fraction::~Fraction() {
}

//Circle

Circle::Circle() {
radius->setNum(1);
radius->setDenom(1);
}
Circle::Circle(Fraction& arg1) {
radius->setNum(arg1.getNum());
radius->setDenom(arg1.getDenom());
}
Circle::~Circle() {
delete this->radius;
}

当我在 main() 中创建对象时出现问题

 Fraction* fPtr = new Fraction(4, 1);
Circle* cPtrA = new Circle(*fPtr);

这两个都是类。首先,我使用复制构造函数将 classFraction 的分子设置为 4,将分母设置为 1。

然后我想将那个 (4, 1) 传递到我的 classCircle 中,但是我通过调试器得到了这个未处理异常的错误

最佳答案

在下面的构造函数中,您没有为 radius 分配任何内容

Circle::Circle(Fraction& arg1) {
radius->setNum(arg1.getNum());
radius->setDenom(arg1.getDenom());
}

有不同的选项,但如果您想在 Circle 中复制 Fraction,您可以这样做:

Circle::Circle(Fraction& arg1) : radius(new Fraction(arg1)) {
}

可能最好只存储对象的拷贝

class Circle {
public:
Circle();
Circle(const Fraction& arg1);
~Circle();
void print(void);
protected:
Fraction radius;
};

Circle::Circle(const Fraction& arg1) : radius(arg1)) {
}

请注意,通过将参数设为 const 引用,您向编译器和其他用户表明传递的 Fraction 不会被调用更改。

关于c++ - 未处理的异常,传递对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16710883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com