请各位C++编程高手帮忙编一个类的大作业,题目是:分数的加减类(这里的分数是分数、整数的分数)
要求:(前提:确保运行正确,请不要从别的网页随便复制粘贴过来,要原创。)【要求比较多,大部分要求符合也可】1.类中要有公有、私有成员。数据成员要有子对象、静态数据成员。成...
要求:(前提:确保运行正确,请不要从别的网页随便复制粘贴过来,要原创。)【要求比较多,大部分要求符合也可】
1.类中要有公有、私有成员。数据成员要有子对象、静态数据成员。成员函数要有至少二个普通成员函数,一个静态成员函数,一个友元函数,一个常成员函数。
2.要有析构函数。
3.构造函数要重载无参、有参、复制构造函数。
4.要实现单继承或多继承。
5.在程序中要对子对象、静态数据成员初始化,要调用普通成员函数、静态成员函数、友元函数、常成员函数。
大大们做好了请发我QQ邮箱871553275,万分感谢! 展开
1.类中要有公有、私有成员。数据成员要有子对象、静态数据成员。成员函数要有至少二个普通成员函数,一个静态成员函数,一个友元函数,一个常成员函数。
2.要有析构函数。
3.构造函数要重载无参、有参、复制构造函数。
4.要实现单继承或多继承。
5.在程序中要对子对象、静态数据成员初始化,要调用普通成员函数、静态成员函数、友元函数、常成员函数。
大大们做好了请发我QQ邮箱871553275,万分感谢! 展开
6个回答
展开全部
#include <iostream>
#include <stdlib.h>
class fct
{
int _fz;
int _fm;
// 求2个数的最大公约数
static int _gcd(int v1, int v2){
if(v1 < v2)
std::swap(v1, v2);
while(v2 != 0)
std::swap(v1 %= v2, v2);
return v1;
}
// 最简化分子, 分母
fct& _cut(){
int gcd = _gcd(_fm, _fz);
_fm /= gcd;
_fz /= gcd;
return *this;
}
friend fct operator +(const fct& left, const fct& right);
friend fct operator -(const fct& left, const fct& right);
friend std::ostream& operator <<(std::ostream& os, const fct& f);
public:
fct(): _fz(0), _fm(1){}
fct(int fz, int fm = 1): _fz(fz), _fm(fm){}
};
// 重载<<操作, 输出样式为 (分子/分母)
std::ostream& operator <<(std::ostream& os, const fct& f){
return (os << "(" << f._fz << "/" << f._fm << ")");
}
// 重载2个分数的加法
fct operator +(const fct& left, const fct& right){
return fct(left._fz*right._fm+right._fz*left._fm, left._fm*right._fm)._cut();
}
// 重载2个分数的减法
fct operator -(const fct& left, const fct& right){
return fct(left._fz*right._fm+right._fz*left._fm, left._fm*right._fm)._cut();
}
int main()
{
fct f1(1, 3); // 3分之1
fct f2(2, 5); // 5分之2
fct f3(1, 4); // 4分之1
std::cout << f1 << " + " << f2 << " = " << f1+f2 << std::endl;
std::cout << f2 << " - " << f3 << " = " << f2-f3 << std::endl;
system("pause");
return 0;
}
//=============输出测试VC++2010===========================
(1/3) + (2/5) = (11/15)
(2/5) - (1/4) = (13/20)
请按任意键继续. . .
//=======================================================
#include <stdlib.h>
class fct
{
int _fz;
int _fm;
// 求2个数的最大公约数
static int _gcd(int v1, int v2){
if(v1 < v2)
std::swap(v1, v2);
while(v2 != 0)
std::swap(v1 %= v2, v2);
return v1;
}
// 最简化分子, 分母
fct& _cut(){
int gcd = _gcd(_fm, _fz);
_fm /= gcd;
_fz /= gcd;
return *this;
}
friend fct operator +(const fct& left, const fct& right);
friend fct operator -(const fct& left, const fct& right);
friend std::ostream& operator <<(std::ostream& os, const fct& f);
public:
fct(): _fz(0), _fm(1){}
fct(int fz, int fm = 1): _fz(fz), _fm(fm){}
};
// 重载<<操作, 输出样式为 (分子/分母)
std::ostream& operator <<(std::ostream& os, const fct& f){
return (os << "(" << f._fz << "/" << f._fm << ")");
}
// 重载2个分数的加法
fct operator +(const fct& left, const fct& right){
return fct(left._fz*right._fm+right._fz*left._fm, left._fm*right._fm)._cut();
}
// 重载2个分数的减法
fct operator -(const fct& left, const fct& right){
return fct(left._fz*right._fm+right._fz*left._fm, left._fm*right._fm)._cut();
}
int main()
{
fct f1(1, 3); // 3分之1
fct f2(2, 5); // 5分之2
fct f3(1, 4); // 4分之1
std::cout << f1 << " + " << f2 << " = " << f1+f2 << std::endl;
std::cout << f2 << " - " << f3 << " = " << f2-f3 << std::endl;
system("pause");
return 0;
}
//=============输出测试VC++2010===========================
(1/3) + (2/5) = (11/15)
(2/5) - (1/4) = (13/20)
请按任意键继续. . .
//=======================================================
追问
额....,刚刚听了别人的建议,似乎对题目要求也有点弄不明白了,这个“初始化”的意义....能加入析构函数么,
追答
分子默认初始话为0, 分母默认为1, 也就是0/1 = 0 , 因为除数不可以是0, 所以分母设为1.
这个类型并不需要析构函数的, 因为全部是内置内型而且没有动态内存分配.
要加的话就加个空的
~ fct () { } // 析构函数什么也不做.
题目中的继承等也是不需要的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
什么人出的题目,“分数加减”居然还要“继承或多继承”!
追问
C++大作业的总体题目是“类”,每人题目不同,以上几个要求是总要求。我的题目是“分数加减类”,如果不能用到“继承或多继承”的话就去掉吧,但大部分要求要满足~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
分数的加减类
参考资料: 分数的加减类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
亲,传给你了哟,你看看吧~~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已发送~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询