本文共 3255 字,大约阅读时间需要 10 分钟。
【项目1-实现复数类中的运算符重载】
(1)请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除class Complex {public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+(const Complex &c2); Complex operator-(const Complex &c2); Complex operator*(const Complex &c2); Complex operator/(const Complex &c2); void display();private: double real; double imag;};//下面定义成员函数//下面定义用于测试的main()函数int main(){ Complex c1(3,4),c2(5,-10),c3; cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); c3=c1+c2; cout<<"c1+c2="; c3.display(); c3=c1-c2; cout<<"c1-c2="; c3.display(); c3=c1*c2; cout<<"c1*c2="; c3.display(); c3=c1/c2; cout<<"c1/c2="; c3.display(); return 0;}
(2)请用类的友元函数,而不是成员函数,再次完成上面提及的运算符的重载;
(3)定义一个定义完整的类(是可以当作独立的产品发布,成为众多项目中的“基础工程”)。这样的类在(2)的基础上,扩展+、-、*、/运算符的功能,使之能与double型数据进行运算。设Complex c; double d; c+d和d+c的结果为“将d视为实部为d的复数同c相加”,其他-、*、/运算符类似。【项目2-Time类中的运算符重载】
实现Time类中的运算符重载。class CTime{private: unsigned short int hour; // 时 unsigned short int minute; // 分 unsigned short int second; // 秒public: CTime(int h=0,int m=0,int s=0); void setTime(int h,int m,int s); void display(); //二目的比较运算符重载 bool operator > (CTime &t); bool operator < (CTime &t); bool operator >= (CTime &t); bool operator <= (CTime &t); bool operator == (CTime &t); bool operator != (CTime &t); //二目的加减运算符的重载 //返回t规定的时、分、秒后的时间 //例t1(8,20,25),t2(11,20,50),t1+t2为19:41:15 CTime operator+(CTime &t); CTime operator-(CTime &t);//对照+理解 CTime operator+(int s);//返回s秒后的时间 CTime operator-(int s);//返回s秒前的时间 //二目赋值运算符的重载 CTime &operator+=(CTime &c); CTime &operator-=(CTime &c); CTime &operator+=(int s);//返回s秒后的时间 CTime &operator-=(int s);//返回s秒前的时间 //一目运算符的重载 CTime operator++(int);//后置++,下一秒 CTime &operator++();//前置++,下一秒 CTime operator--( int);//后置--,前一秒 CTime &operator--();//前置--,前一秒};
提示1:并不是所有比较运算重载函数都很复杂
//比较运算返回的是比较结果,是bool型的true或false//可以直接使用已经重载了的运算实现新运算,例如果已经实现了 > ,则实现 <= 就可以很方便了……bool CTime::operator <= (CTime &t) // 判断时间t1<=t2{ if (*this > t) return false; return true;}
甚至可以如下面的代码般简练:
bool CTime::operator <= (CTime &t){ return !(*this > t)}
提示2:并不是所有复合赋值运算重载函数都需要很复杂
//可以直接使用已经重载了的加减运算实现//这种赋值, 例如 t1+=20,直接改变当前对象的值,所以在运算完成后,将*this作为返回值CTime &CTime::operator+=(CTime &c){ *this=*this+c; return *this;}
提示3:请自行编制用于测试的main()函数,有些结果不必依赖display()函数,提倡用单步执行查看结果
【项目3-数组类运算的实现】
设计数组类Array,为了实现测试函数中要求的功能,请补足相关的函数(构造、析构函数)和运算符重载的函数。请注意引用的用法。 实现策略提示:可以将测试函数中的语句加上注释,取消一句的注释,增加相应的函数,以渐增地实现所有的功能,避免全盘考虑带来的困难。class Array{private: int* list; //用于存放动态分配的数组内存首地址 int size; //数组大小(元素个数)public: //成员函数声明};//要求测试函数能够运行出正确、合理的结果:int main(){ int a[8]= { 1,2,3,4,5,6,7,8}; int b[8]= { 10,20,30,40,50,60,70,80}; Array array1(a,8),array3,array4; const Array array2(b,8); array4=array3=array1+array2; array3.show(); array4.resize(20); array4[8]=99; cout<<
【项目4-String类的构造】
写一个能处理字符串的类,其数据成员如下所示:class String { public: ...//需要的成员函数(若需要的话,声明友元函数)private: char *p; //指向存储的字符串 int len; //记录字符串的长度 };
请构造String类的加、减运算。其中,s1 + s2将两个字符串的连接起来;s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。
提示:有指针成员,设计时要注意。这个,你懂的。转载地址:http://nlhtl.baihongyu.com/