有一个类定义如下:
class CRmb
{
private:
int yuan;
int jiao;
int fen;
public:
CRmb(){yuan=0; jiao=0; fen=0;}
CRmb(int, int, int); // 带参数的构造函数
CRmb(const CRmb &); // 拷贝构造函数
CRmb(double); // 类型转换构造函数,将一个实型数据转换成人民币对象
~CRmb(); // 析构函数
friend ostream & operator<<(ostream& out, const CRmb &); // 在屏幕上输出
Rmb的值,输出格式如下:
// 现在有: 元 角 分
//======如下函数自己设计原型==========
//(1)前自增运算符重载函数,要求实现对分自增1,并且考虑进位问题
//(2)后自增运算符重载函数,要求实现对分自增1,并且考虑进位问题
//(3)重载“+”运算符,要求实现下面两种加法运算
// a、CRmb对象+CRmb对象
// b、CRmb对象+double对象
};
在上述基础上,按要求完善类的定义:
(1) 完善类的所有成员函数定义
(2) 在析构函数中输出:“析构函数被调用!”
(3) 提供以下类的完整测试程序,不允许进行修改。
void fn(CRmb& x)
{
cout<<"In fn: "<<x<<endl;
}
void main()
{
CRmb m1;
cout<<m1<<endl<<endl<<endl;
CRmb m2(1001, 9, 9);
m2++;
cout<<m2<<endl;
++m2;
cout<<m2<<endl<<endl<<endl;
CRmb m3(m2);
cout<<m3<<endl<<endl<<endl;
CRmb m4=m1+m2;
cout<<m4<<endl;
m4=m1+50.0;
cout<<m4<<endl<<endl<<endl;
fn(50.13);
}
/*=======================================================
*学号:
*作业:E19
*功能:(1) 完善类的所有成员函数定义
(2) 在析构函数中输出:“析构函数被调用!”
(3) 提供以下类的完整测试程序,不允许进行修改。
*作者:
*日期:2016.5.22
*========================================================*/
#include<iostream>
using namespace std;
class CRmb
{
private:
int yuan;
int jiao;
int fen;
public:
CRmb(){yuan=0;jiao=0;fen=0;}
CRmb(int,int,int); //带参数的构造函数
CRmb(const CRmb&); //拷贝构造函数
CRmb(double); //类型转换构造函数,将一个实型数据转换成人民币对象
~CRmb(); //析构函数
CRmb& operator++(); //前自增
CRmb operator++(int); //后自增
CRmb& operator+(CRmb& rhs); //重载“+”运算符
CRmb& operator+(double); //重载“+”运算符
friend ostream& operator<<(ostream& out,const CRmb&);//在屏幕上输出Rmb的值,输出格式如下:
//现在有: 元 角 分
};
CRmb::CRmb(int a,int b,int c) //带参数的构造函数
{
yuan=a;
jiao=b;
fen=c;
}
CRmb::CRmb(const CRmb& t) //拷贝构造函数
{
yuan=t.yuan;
jiao=t.jiao;
fen=t.fen;
}
CRmb::CRmb(double x) //类型转换构造函数,将一个实型数据转换成人民币对象
{
x=(int)(x*100);
yuan=(int)x/100;
x=(int)x%100;
jiao=(int)x/10;
fen=(int)x%10;
}
CRmb::~CRmb() //析构函数
{
cout<<"Destructing:"<<yuan<<endl;
}
CRmb& CRmb::operator++() //前自增
{
++fen;
if(fen==10)
{
fen=0;
++jiao;
if(jiao==10)
{
jiao=0;
++yuan;
}
}
return *this;
}
CRmb CRmb::operator++(int) //后自增
{
CRmb ret=*this;
++fen;
if(fen==10)
{
fen=0;
++jiao;
if(jiao==10)
{
jiao=0;
++yuan;
}
}
return ret;
}
CRmb& CRmb::operator+(CRmb& rhs) //重载“+”运算符
{
fen+=rhs.fen;
if(fen>=10)
{
fen=fen%10;
++jiao;
}
jiao+=rhs.jiao;
if(jiao>=10)
{
jiao=jiao%10;
++yuan;
}
yuan+=rhs.yuan;
return *this;
}
CRmb& CRmb::operator+(double a) //重载“+”运算符
{
double x=this->yuan*100+this->jiao*10+this->fen;
x=(x*1.0)/100;
x+=a;
return CRmb(x);
}
ostream& operator<<(ostream& out,const CRmb& t) //输出操作运算符重载
{
out<<"现在有:"<<t.yuan<<"元"<<t.jiao<<"角"<<t.fen<<"分"<<endl;
return out;
}
void fn(const CRmb& x)
{
cout<<"ln fn:"<<x<<endl;
}
void main()
{
CRmb m1;
cout<<m1<<endl<<endl<<endl;
CRmb m2(1001,9,9);
m2++;
cout<<m2<<endl;
++m2;
cout<<m2<<endl<<endl<<endl;
CRmb m3(m2);
cout<<m3<<endl<<endl<<endl;
CRmb m4=m1+m2;
cout<<m4<<endl;
m4=m1+50.0;
cout<<m4<<endl<<endl<<endl;
fn(50.13);
}