1.分别用类重载和友元重载实现自定义加法和减法
#include <iostream>
using namespace std;
class MM
{
public:
MM(){}; //无参构造函数
MM(int mmX, int mmY) //有参构造函数
{
this->mmX = mmX; //用this指针初始化 形参名字和变量名字相同 用this区分
this->mmY = mmY;
}
MM& operator+(MM &mm) //类重载 MM为返回的类型 函数名由operator和+组成 参数=操作数-1 &mm引用,取别名 参数可以被强转
{
MM tempMM; //定义tempMM
tempMM.mmX = this->mmX + mm.mmX;
tempMM.mmY = this->mmY + mm.mmY;
return tempMM;
}
friend MM operator-(MM &maxMM, MM &minMM); //友元重载 自定义减法的操作 参数个数=操作数
void print() //打印
{
cout << "x:" << mmX << "\ty:" << mmY << endl;
}
protected:
int mmX; //定义了变量
int mmY;
};
MM operator-(MM &maxMM, MM &minMM) //友元函数
{
MM temp;
temp.mmX = maxMM.mmX - minMM.mmX;
temp.mmY = maxMM.mmY - minMM.mmY;
return temp;
}
int main()
{
MM maxMM(100, 200); //复数
MM minMM(300, 400);
MM mm = maxMM + minMM; //类重载 实质是 maxMM.operator+(minMM)
mm.print();
mm = maxMM - minMM; //友元重载 实质是 operator-(maxMM,minMM)
mm.print();
while (1);
return 0;
}
2.身份证设定
more
#include<iostream>
#include<iomanip>
using namespace std;
class date
{
private:
int y,m,d;
public:
date(int year,int month,int day)
{
y=year;
m=month;
d=day;
}
int getyear() {return y;}
int getmonth() {return m;}
int getday() {return d;}
};
class PID
{
private:
int type;
char id[19];
date cdate;
public:
PID(int t,char _id[],date _cdate);
void print();
void up();
// ~PID();
};
PID::PID(int t,char _id[],date _cdate):type(t),cdate(_cdate)
{
int i,n;
if(type==1)
n=15;
else
n=18;
for(i=0;i<n;i++)
id[i]=_id[i];
}
void PID::up()
{
if(type==2)
return;
int i,n=0;
for(i=16;i>7;i--)
id[i]=id[i-2];
if(cdate.getyear()>=2000)
{
id[6]=2+'0';
id[7]=0+'0';
}
else
{
id[6]=1+'0';
id[7]=9+'0';
}
for(i=0;i<17;i++)
n+=(id[i]-'0');
n=n%10;
if(n==0)
id[17]='X';
else
id[17]=n+'0';
}
void PID::print()
{
id[18]='\0';
cout<<"type=2"<<" ";
cout<<"birth="<<setw(2)<<setfill('0')<<cdate.getyear()<<"."<<
setw(2)<<setfill('0')<<cdate.getmonth()<<"."<<
setw(2)<<setfill('0')<<cdate.getday()<<endl;
cout<<"ID="<<id<<endl;
}
int main()
{
int type;
char id[19];
int y,m,d,i,t;
cin>>t;
while(t--)
{
cin>>type;
if(type==1)
for(i=0;i<15;i++)
cin>>id[i];
else
for(i=0;i<18;i++)
cin>>id[i];
cin>>y>>m>>d;
PID sb(type,id,date(y,m,d));
sb.up();
sb.print();
}
}
3.手机服务more
#include<iostream>
#include<string>
using namespace std;
class Date
{
private:
int year,month,day;
public:
Date(int y,int m,int d):year(y),month(m),day(d) {}
int gety() {return year;}
int getm() {return month;}
int getd() {return day;}
void print() {}
};
class phone
{
private:
char type;
string number;
int status;
Date *date;
public:
phone(char t,string n,int s): type(t),number(n),status(s)
{
cout<<"Construct a new phone"<<number<<endl;
if(type=='A')
cout<<"类型=机构||";
else if (type=='B')
cout<<"类型=企业||";
cout<<"号码="<<number;
if(status==1)
cout<<"||State=在用"<<endl;
else if(status==2)
cout<<"||State=未用"<<endl;
else if(status==3)
cout<<"||State=停用"<<endl;
}
phone(phone &s)
{
type=s.type;
status=s.status;
number=s.number;
cout<<"Construct a copy of phone"<<number<<endl;
cout<<"类型=备份||号码="<<number<<"X";
if(status==1)
cout<<"||State=在用"<<endl;
else if(status==2)
cout<<"||State=未用"<<endl;
else if(status==3)
cout<<"||State=停用"<<endl;
}
vodi stop(Date &s)
{
cout<<"Stop the phone "<<number<<endl;
if(type=='A')
cout<<"类型=机构||";
else if (type=='B')
cout<<"类型=企业||";
cout<<"号码="<<number;
cout<<"||State=停用 ||停机日期="
<<s.gety()<<"."
<<s.getm()<<"."
<<s.getd()<<endl;
cout<<"----"<<endl;
}
};
int main()
{
int year,month,day,status,t;
char type;
string number;
cin>>t;
while(t--)
{
cin>>type>>number>>status>>year>>month>>day;
phone sb1(type,number,status);
Date sb2(year,month,day);
phone sb3(sb1);
sb1.stop(sb2);
}
}
}