第十三次作业
1. 编写正方形类Square,要求提供赋值运算符重载函数、拷贝构造函数,并在这两个成员函数中提供相应的输出信息。通过使用Square类,回答下面问题: (1)Square s1(4);
Square s2=s1;//这里是调用运算符重载函数还是拷贝构造函数? (2)Square s1(4); Square s2;
s2=s1;//这里是调用运算符重载函数还是拷贝构造函数? 解:(1)
#if !defined __Square__H__ #define __Square__H__ #include
friend istream & operator>>(istream &input,Square &s); friend ostream & operator<<(ostream &output, Square &s); Square & operator=(const Square &s); Square(double a); Square(const Square &x);
public:
private: double n; }; #endif
#include
Square::Square(const Square &x) { }
istream & operator>>(istream &input,Square &s) {
cout<<\这里调用拷贝构造函数!\< cout<<\这里调用构造函数!\< } input>>s.n; return input; ostream & operator<<(ostream &output, Square &s) { } Square &Square::operator=(const Square &x) { } #include 运行结果: double m; cout<<\< cout<<\这里调用运算符'='重载函数!\< cout<<\这里调用运算符'<<'重载函数!\< Please enter the longth of square: 这里调用运算符'>>'重载函数! 4 这里调用构造函数! 这里调用拷贝构造函数! 这里调用运算符'='重载函数! 4 这里调用运算符'<<'重载函数! 请按任意键继续. . . (2) #if !defined __Square__H__ #define __Square__H__ #include using std::ostream; class Square { friend istream & operator>>(istream &input,Square &s); friend ostream & operator<<(ostream &output, Square &s); Square & operator=(const Square &s); Square(double a=0); Square(const Square &x); public: private: double n; }; #endif #include Square::Square(const Square &x) { } istream & operator>>(istream &input,Square &s) { } ostream & operator<<(ostream &output, Square &s) { } Square &Square::operator=(const Square &x) { cout<<\这里调用运算符'='重载函数!\< cout<<\这里调用运算符'<<'重载函数!\< input>>s.n; return input; cout<<\这里调用拷贝构造函数!\< cout<<\这里调用构造函数!\< } #include double m; cout<<\< 运行结果: Please enter the longth of square: 这里调用运算符'>>'重载函数! 5 这里调用构造函数! 这里调用构造函数! 这里调用运算符'='重载函数! 5 这里调用运算符'<<'重载函数! 请按任意键继续. . . 2. 下面的题选自ACM虚拟班中级题,要求定义日期类,并对小于运算符<、插入(输出) 运算符<<、提取(输入)运算符>>进行重载。 Problem 46 日期比较 Time Limit: 10 sec Description “明明,今天是哪年哪月哪日?”明明的爸爸问道。 “2008年6月22号。”明明回答。 “那明天呢?”明明的爸爸继续问道。 “2008年6月23号。”明明回答。 “那后天呢?” “2008年6月24号。” ?? “2008年6月22号是不是在2008年6月23号前面?”明明的爸爸问。 “是啊,这有什么好问的??”明明有些不耐烦。 “2008年6月24号是不是在2008年6月23号后面?”明明的爸爸又问。 接着明明的爸爸又问了很多类似的问题。明明终于烦了,他很奇怪爸爸怎么问这些问题。这时,明明的爸爸终于说出了他想说的话:“明明,你是不是觉得这些问题很简单,爸爸怎么会问这些问题?”明明说:“是的。”明明的爸爸接着说:“我想告诉你的是,人是会觉得烦的,因为人有一定的忍耐限度,一直问一个人同一个类似的问题,人会被搞的很烦躁,但是电脑就不会,即使你问他一百遍、一千遍相同的问题,电脑都不会烦,它会耐心地一次一次地回答你同一个问题。你能不能帮爸爸写一个程序,告诉程序两个日期,程序就能比较这两个日期中哪个在前哪个在后”明明想了想说:“没问题。”于是就去写程序了。 明明爸爸的问题可以归结为:写一个程序,输入两个合法日期,比较这个两日期哪个在日历中靠前。(具体输出格式见Output) The Input 你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据两行,每组测试数据的第一行为第一个日期,日期的格式为dd mm yyyy,dd表示日,mm表示月,yyyy表示年,中间用一个空格隔开,每组测试数据的第二行为第二个日期,格式与第一个日期一样,每组测试数据的两个日期保证是不同的并且合法。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。 The Output 对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一句话,格式如下:“01 01 1999 is earlier than 02 02 1999”。首先输出靠前的日期,接着输出“ is earlier than ”,然后在输出靠后的日期,注意,小于10的日期、月份之前要加0。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。 注:通常,显示屏为标准输出设备。 Sample Input 01 01 1999 02 02 1999