二、实验内容
1.设计并测试点类Point,其数据成员是直角坐标系的点坐标,友元函数distance用来计算两点间的距离。
2.设计一个书类Book,能够保存书名、定价,所有书的本数和总价。
实验七、运算符重载(2学时) 一、实验目的
1.掌握运算符重载的规则。
2.掌握几种常用的运算符重载的方法。 3.了解转换构造函数的使用方法。
4.了解在Visual C++6.0环境下进行运算符重载要注意的问题。
二、实验内容
1.阅读下面的程序,写出程序运行的结果。 (1)
#include
ostream &operator<<(ostream &out,ABC& f) { out<<\ return out; }
int main(){ ABC obj(10,20,30); cout< #include Number(int x):n(x){} Number& operator++(){ ++n; return *this; } Number& operator++(int){ n++; return *this;} friend Number &operator--(Number &o); friend Number &operator--(Number o,int); void display(){cout<<\ \}; Number &operator--(Number &o){--o.n; return o; } Number &operator--(Number o,int){o.n--; return o; } int main(){ Number N1(10); ++ ++ ++N1; N1.display(); N1++; N1.display(); --N1; N1.display(); N1-- -- --; N1.display(); return 0; } 2.设计并实现一个日期类Date,要求: (1)可以建立具有指定日期(年、月、日)的Date对象,默认日期是2009.1.1。 (2)可以从输出流输出一个格式为“年-月-日”的日期,其中年是四位数据,月、日可以是一位也可以是两位数据。 (3)可以动态地设置年、月、日。 (4)可以用运算符= =、!=、<和>对两个日期进行比较。 (5)可以用运算符++、--、+=、-=等完成天数的加减一天或若干天的操作 (6)Date类必须能够正确表达日期,不会出现类似于13月,32日一类的情况。Date类还必须处理闰年的问题,闰年包括:所有能被400整除的年份,以及能被4整除同时又不能被100整除的年份。 (7)写出主函数对该类进行测试。 3.下面是一个数组类CArray的定义。要求: (1)在此基础上增加print()成员函数打印数组, (2)重载“=”、“+”、“-” 运算符使之能对该数组类对象进行赋值、加减运算。 (3)写出主函数对该类进行测试。 class CArray {private: int* p_arr; int size; public: CArray(); //缺省构造函数 CArray(int* p_a,int s); //构造函数 CArray(const CArray &r_other);//复制构造函数 ~CArray();//析构函数 int operator[](int pos) const; //访问数组元素值的下标运算符重载函数 int& operator[](int pos); //设置数组元素值的下标运算符重载函数 Carray &operator=(const Carray &other)//赋值运算符“=”重载函数 Carray &operator+(const Carray &other) //加运算符“=”重载函数 Carray &operator-(const Carray &other) //减运算符“=”重载函数 void print() const; }; CArray:: CArray() { p_arr=NULL; size=0;} CArray:: CArray(int* p_a,int s) { if(s>0) { size=s; p_arr=new int[size]; for(int i=0;i { p_arr=NULL; size=0; } } CArray::CArray(const CArray &r_other) { size=r_other.size; if(size) { p_arr=new int[size]; for(int i=0;i CArray::~CArray() { if(p_arr) delete[] p_arr; p_arr=NULL; size=0; } int CArray::operator[](int pos) const { if(pos>=size) return p_arr[size-1]; if(pos<0) return p_arr[0]; return p_arr[pos]; } int& CArray::operator[](int pos) { if(pos>=size) return p_arr[size-1]; if(pos<0) return p_arr[0]; return p_arr[pos]; } 4.下面是一个自定义字符串类的声明。请写出该类所有成员函数的类外定义代码。 class string {private: unsigned buflen; char * buffer; public: string();//构造函数 string(unsigned); string(char); string(const char*); string(const string &);//复制构造函数 ~string();//析构函数 //重载赋值运算符 string& operator=(const string &right); string& operator+=(const string &right); char *operator+=(const char *right); friend string operator+(const string & left,const string & right); //字符串连接 string operator()(unsigned start,unsigned len); //取子串 unsigned length()const; //求字符串长度 char & operator[](unsigned index)const; //访问单个字符 int compare(const string &)const; //字符串比较 operator const char *()const; //到普通c字符串的转换 friend ostream & operator<<(ostream &,string &);//字符串的输出 }; 实验八、模板(2学时) 一、实验目的 1.函数模板的定义与调用。 2.掌握类模板的声明与使用方法。 二、实验内容 1.设计一个函数模板,实现两数的交换,并用int、float、double、char类型的数据进行测试。 2.设计一个函数模板,实现从int、float、double、char类型的数组找出最大值元素。提示:可用类型参数传递数组、用非类型参数传递数组大小,为了找出char*类型数组中的最大值元素,需要对该类型进行重载或特化。 3.编写一个顺序表类模板。 4.建立两个int类型的向量vector,利用merge算法将其合并,然后用sort算法对合并后的向量进行排序,最后输出排序结果。 实验九、输入输出流(自学) 一、实验目的 1.深入理解C++的输入输出的含义与其实现方法。 2.掌握标准输入输出流的应用,包括格式输入输出。 3.掌握对文件的输入输出操作。 二、实验内容 1.阅读下面的程序,写出程序运行的结果。 (1) #include return 0; } (2) #include