gpt4 book ai didi

c++ - 重载赋值操作/流

转载 作者:行者123 更新时间:2023-11-30 02:01:42 24 4
gpt4 key购买 nike

我想知道以下旨在对有理数进行运算的代码是否实际上已经重载了赋值运算和流插入运算符 << 以打印对象。我不太擅长 C++,所以这对我来说是新的,但据我所知,我认为它已经做到了。

    /*
*
* C++ version
*
*/

/* rational.h */

#ifndef RATIONAL_H
#define RATIONAL_H

#include <iostream>

using std::ostream;

struct rational {

rational(int = 0, int = 1);

rational operator+(const rational &) const;
rational operator-(const rational &) const;
rational operator*(const rational &) const;
rational operator/(const rational &) const;

rational operator+(int) const;
rational operator-(int) const;
rational operator*(int) const;
rational operator/(int) const;

friend rational operator+(int, const rational &);
friend rational operator-(int, const rational &);
friend rational operator*(int, const rational &);
friend rational operator/(int, const rational &);

friend ostream &operator<<(ostream &, const rational &);

private:

int den;
int num;
};

#endif /* RATIONAL_H */

/* rational.cc */

#include <iostream>
#include "rational.h"

rational::rational(int num, int den) : num(num), den(den) {}

rational rational::operator+(const rational &o) const {

return rational(num * o.den + o.num * den, den * o.den);
}

rational rational::operator+(int n) const {

return rational(num + n * den, den);
}

rational rational::operator-(const rational &o) const {

return rational(num * o.den - o.num * den, den * o.den);
}

rational rational::operator-(int n) const {

return rational(num - n * den, den);
}

rational rational::operator*(const rational &o) const {

return rational(num * o.num, den * o.den);
}

rational rational::operator*(int n) const {

return rational(num * n, den);
}

rational rational::operator/(const rational &o) const {

return rational(num * o.den, den * o.num);
}

rational rational::operator/(int n) const {

return rational(num, den * n);
}

rational operator+(int n, const rational &o) {

return o + n;
}

rational operator-(int n, const rational &o) {

return rational(n) - o;
}

rational operator*(int n, const rational &o) {

return o * n;
}

rational operator/(int n, const rational &o) {

return rational(n) / o;
}

ostream &operator<<(ostream &out, const rational &o) {

out << '(' << o.num << " / " << o.den << ')';
return out;
}

/* main.cc */

#include <iostream>
#include "rational.h"

using std::cout;
using std::endl;

int main(void) {

rational a(1, 2);
rational b(2, 3);

int i = 5;

cout << a << " + " << b << " = " << a + b << endl;
cout << a << " - " << b << " = " << a - b << endl;
cout << a << " * " << b << " = " << a * b << endl;
cout << a << " / " << b << " = " << a / b << endl;

cout << a << " + " << i << " = " << a + i << endl;
cout << a << " - " << i << " = " << a - i << endl;
cout << a << " * " << i << " = " << a * i << endl;
cout << a << " / " << i << " = " << a / i << endl;

cout << i << " + " << a << " = " << i + a << endl;
cout << i << " - " << a << " = " << i - a << endl;
cout << i << " * " << a << " = " << i * a << endl;
cout << i << " / " << a << " = " << i / a << endl;

return 0;
}

最佳答案

operator<<没关系(虽然你可以写在一行中,但这里没关系):

ostream &operator<<(ostream &out, const rational &o) {
return out << '(' << o.num << " / " << o.den << ')';
}

但是,您还没有定义赋值运算符!

rational & rational::operator=(rational const &rhs) {
den = rhs.den;
num = rhs.num;
return *this;
}

关于c++ - 重载赋值操作/流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13843449/

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