请补足Fraction类的成员函数(不能加数据成员) #include <iostream> #include <cstring> #include <cstdlib> using namespace std; class Fraction { private: int _s, _m; public: void Print() { cout << _s << "/" << _m << endl; } // 在此处补充你的代码 }; int main() { Fraction a; a = "3/5"; a.Print(); a = "48/-72"; a.Print(); return 0; }输入 无 输出 3/5 -2/3
时间: 2024-03-03 16:51:33 浏览: 172
使用include <iostream>时一定要加using namespace std
在这里可以使用类的类型转换函数,将字符串转换为分数类型。具体实现可以参考如下代码:
```c++
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Fraction
{
private:
int _s, _m;
public:
Fraction(int s = 0, int m = 1) : _s(s), _m(m) {}
void Print() { cout << _s << "/" << _m << endl; }
Fraction& operator=(const char* str)
{
char* p = strchr(str, '/');
if (p != NULL)
{
*p = '\0';
_s = atoi(str);
_m = atoi(p + 1);
if (_m < 0)
{
_s = -_s;
_m = -_m;
}
}
return *this;
}
};
int main()
{
Fraction a;
a = "3/5";
a.Print();
a = "48/-72";
a.Print();
return 0;
}
```
在上面代码中,我们重载了赋值运算符 `=` ,并将其参数类型设置为 `const char*` ,这样就可以通过字符串给分数类型的变量赋值了。在重载函数中,我们使用 `strchr` 函数找到分数字符串中的 `/` 符号,然后将其替换为 `\0` ,并使用 `atoi` 函数将分数字符串的两部分转换为整数,最后将分子和分母存储在分数类型的 `_s` 和 `_m` 成员变量中。需要注意的是,如果分母小于 0 ,则需要将分数取相反数,即分子和分母都取相反数。
阅读全文