使用重载运算符和成员指针时出现分段错误 所以我在C++编程中是相当新的,在我现在的编程课程中,我们正在学习运算符重载和朋友函数。我们被告知要制作一个具有不同类型构造函数和重载运算符的类Money。当我们没有私有成员变量的指针时,这个程序就容易多了,但现在它有点超出我的理解范围
在继续定义其他重载运算符函数之前,我想在这方面得到一些帮助。基本上,我试图做的是将Money类的两个对象添加到一起,但在运行程序时,我不断遇到分段错误。我知道这与指针和访问无法访问的内存有关,但我不确定哪里出错了 到目前为止,这是一个简短的程序,因此代码应该很容易阅读。任何帮助都将不胜感激使用重载运算符和成员指针时出现分段错误 所以我在C++编程中是相当新的,在我现在的编程课程中,我们正在学习运算符重载和朋友函数。我们被告知要制作一个具有不同类型构造函数和重载运算符的类Money。当我们没有私有成员变量的指针时,这个程序就容易多了,但现在它有点超出我的理解范围,c++,pointers,segmentation-fault,C++,Pointers,Segmentation Fault,在继续定义其他重载运算符函数之前,我想在这方面得到一些帮助。基本上,我试图做的是将Money类的两个对象添加到一起,但在运行程序时,我不断遇到分段错误。我知道这与指针和访问无法访问的内存有关,但我不确定哪里出错了 到目前为止,这是一个简短的程序,因此代码应该很容易阅读。任何帮助都将不胜感激 class Money { public: Money(int d=0, int c=0); Money(const Money&); // ~Money()
class Money
{
public:
Money(int d=0, int c=0);
Money(const Money&);
// ~Money();
Money& operator=(const Money&);
Money operator+(const Money&) const;
Money operator-(const Money&) const;
Money& operator*(double);
Money& operator/(double);
friend istream& operator>>(istream&, Money&);
friend ostream& operator<<(ostream&, const Money&);
private:
int* dollars;
int* cents;
};
int main()
{
Money m1(3, 43), m2(4, 64);
Money m3 = m1 + m2;
return 0;
}
Money::Money(int d, int c)
{
*dollars = d;
*cents = c;
}
Money Money::operator+(const Money& m1) const
{
Money result;
*result.dollars = *this->dollars + *m1.dollars;
*result.cents = *this->cents + *m1.cents;
return result;
}
阶级金钱
{
公众:
货币(整数d=0,整数c=0);
货币(const Money&);
//~Money();
货币和运营商=(常量货币和);
货币操作员+(常量货币和)常量;
货币操作员-(const Money&)const;
货币和运营商*(双倍);
货币和运营商/(双倍);
朋友istream&operator>>(istream&金钱&);
friend ostream&OperatorContents+*m1.0美分;
返回结果;
}
您尚未为美元和美分分配内存。您应该在构造函数中执行此操作:
Money::Money(int d, int c)
{
dollars = new int;
cents = new int;
*dollars = d;
*cents = c;
}
别忘了释放析构函数中的内存:
Money::~Money() {
delete dollars;
delete cents;
}
否则,您只需声明有两个指向int
s(dollars
和cents
)的指针,但实际上并没有确保它们指向内存中的有效点;它们是未初始化的
提示:在实现复制构造函数(Money(const Money&)
)和运算符(感谢@LokiAstari的深入研究)时,请记住此资源管理。为什么要将美元和美分定义为指向整数的指针?那是个坏主意。您尝试使用这些整数(取消指针限制)而不实际初始化它们。是否需要使用int*表示美元和美分?如果您的作业允许,请使用普通整数。我需要使用指向整数的指针表示美元和美分。我希望我能!仍在学习动态内存分配的细节。@DaneWind“我必须使用指向整数的指针来表示美元和美分”这完全是胡说八道,请告诉你的教授。@DaneWind请重新阅读你的问题这不是一个用于指针的好地方。非常感谢。我仍然在学习很多关于指针的知识,我想我完全跳过了这一点。@Danewin为什么你需要简单的int
变量的指针?这个建议让问题变得更糟。@LokiAstari:直到OP确认他们实际上不需要美元和美分作为指针,这个答案应该可以。@frslm不同意。您的解决方案违反了三条规则,因此导致的问题比它解决的问题多得多。