题目描述
时钟类CClock有时、分、秒;人民币类CRmb有元、角、分三个数据成员。试为这种类型的类对象定义一个两两相加的函数模板add,包括三个参数:2个对象和一个int表示进制。(要求不能用函数重载的方法)
主函数如下所示:
...
CClock c1(...), c2(...), c;
c = add(c1, c2, 60);
cout << c << endl;
CRmb r1(...), r2(...), r;
r = add(r1, r2, 10);
cout << r << endl;
输入
第一个时钟对象的时分秒
第二个时钟对象的时分秒
第一个人民币对象的元角分
第二个人民币对象的元角分
输出
两个时钟对象相加的结果
两个人民币对象相加的结果
IO模式
本题IO模式为标准输入/输出(Standard IO),你需要从标准输入流中读入数据,并将答案输出至标准输出流中。
示例输入:
15 34 25
7 25 36
5 6 7
3 4 5
示例输出:
23 0 1\n
9 1 2\n
#include<iostream>
using namespace std;
class CClock {
int a, b, c;
public:
CClock(int aa,int bb,int cc):a(aa),b(bb),c(cc){}
CClock(){}
friend ostream &operator<<(ostream& os, CClock& x) {
os << x.a << " " << x.b << " " << x.c << endl;
return os;
}
template<class T>
friend T add(T& x, T& y, int num);
};
class CRmb {
int a, b, c;
public:
CRmb(int aa, int bb, int cc) :a(aa), b(bb), c(cc) {}
CRmb(){}
friend ostream &operator<<(ostream& os, CRmb& x) {
os << x.a << " " << x.b << " " << x.c << endl;
return os;
}
template<class T>
friend T add(T& x, T& y, int num);
};
template<class T>
T add(T& x, T& y, int num) {
int n1 = x.a * num * num + x.b * num + x.c;
int n2 = y.a * num * num + y.b * num + y.c;
int sum = n1 + n2;
int a = sum / num / num;
int b = (sum % (num * num)) / num;
int c = sum % num;
return T(a, b, c);
}
int main() {
int a, b, c;
cin >> a >> b >> c;
CClock c1(a, b, c);
cin >> a >> b >> c;
CClock c2(a, b, c);
CClock c3;
c3 = add(c1, c2, 60);
cout << c3 ;
cin >> a >> b >> c;
CRmb r1(a, b, c);
cin >> a >> b >> c;
CRmb r2(a, b, c);
CRmb r3;
r3 = add(r1, r2, 10);
cout << r3 ;
//system("pause");
return 0;
}