《C++语言基础》实践项目——运算符重载(一)

简介: 返回:贺老师课程教学链接【项目1-实现复数类中的运算符重载】(1)请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除class Complex {public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+
+关注继续查看

返回:贺老师课程教学链接


【项目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秒前的时间
};
提示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-分数类中的运算符重载】
  (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。可以在第4周分数类代码的基础上开始工作。
class CFraction
{
private:
    int nume;  // 分子
    int deno;  // 分母
public:
    //构造函数及运算符重载的函数声明
};
//重载函数的实现及用于测试的main()函数
  (2)在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+a, 45+a, a*27, 5/a等各种运算。

[参考解答]

【项目4-String类的构造】
写一个能处理字符串的类,其数据成员如下所示:
class String  
{  
public:
   ...//需要的成员函数(若需要的话,声明友元函数)
private:  
    char *p;   //指向存储的字符串 
    int len;   //记录字符串的长度  
};  
请构造String类的加、减运算。其中,s1 + s2将两个字符串的连接起来;s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。
提示:有指针成员,设计时要注意。这个,你懂的。





目录
相关文章
|
自然语言处理 IDE 开发工具
2015级C++第16周实践项目 文件
本周项目中用到的数据文件,请在此下载点这儿…。 【项目1 - 小玩文件】参考解答 (1)下面程序的功能是统计文本文件abc.txt中的字符个数,请填空将程序补充完整。 #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include _____________ // (1) using namespace std;
1260 0
|
C++
2015级C++第15周实践项目 范型程序设计
【项目1:程序填空】下面程序运行后,输出结果如下: 请填空将程序补充完整。  参考解答 #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;functional&gt; using namespace std; void Show(double)
1179 0
|
存储 C++
2015级C++第14周实践项目 模板
【项目1-排序函数模板】   已知 void Sort(int a[],int size); void Sort(double a[],int size); 是一个函数模板的两个实例,其功能是将数组a中的前size个元素按从小到大顺序排列。试设计这个函数模板。 【项目2-两个成员的类模板】   设有如下的类声明: class Test{ public:
1115 0
|
C++
2015级C++第13周实践项目 多态性和实现
【项目1-分数类中的运算符重载】 参考解答   (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。 class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的
1088 0
|
C++ 存储
2015级C++第12周实践项目 运算符重载(一)
【项目1-实现复数类中的运算符重载】 参考解答   (1)请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除 class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex o
930 0
|
C++ C语言
2015级C++第10、11周补充实践项目 继承和派生
【项目0 - 是春哥啊】参考解答 请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为: Name: 春哥 Grade: 19 #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; class Person{ public: Person(char* s){
963 0
|
测试技术 C++ 网络架构
2015级C++第10、11周实践项目 继承和派生
【项目1 - 点-圆-圆柱类族的设计】参考解答 按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务: (1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试; (2)以Point为基类,派生出一个Circle(圆)类,增加数
1199 0
|
C++
2015级C++第3周实践项目
【项目1:个人所得税计算器】 编写选择结构程序,输入个人月收入总额,计算出他本月应缴税款和税后收入(计算办法见附:关于个人所得税的有关背景知识)。 (1)自选if语句的嵌套或/和switch语句完成程序设计; (2)下面给出程序的基本框架,请从课程主页找到链接下载使用。 #include &lt;iostream&gt; using namespace st
1298 0
|
C++
2015级C++第2周实践项目
【项目1 - 宣告“主权”】   你已经是CSDN博客主了,用IT人特有的方式,编一段程序,在屏幕上输出你想说的话,按要求发布博文,作为我们的开山之作。 【项目2 - 胖子不想说体重】参考解答   成年男性的标准体重公式为: 标准体重(kg)=身高(cm)−100  标准体重(kg)= 身高(cm)-100   超标准体重20%为超重,比标准体重轻20%为超轻。请编写
1053 0
|
C++
《C++语言基础》实践项目——异常处理和命名空间
返回:贺老师课程教学链接 【项目1-平方根中的异常】 编写一个程序,求输入数的平方根。设置异常处理,当输入负数时采用异常处理机制给出提示。 [参考解答] 【项目2-有些数的阶乘不算了】 求n!的函数,当用户的输入为负数,以及输入数太大时(例如大于12),使用异常处理机制予以拒绝,并给出恰当的提示。 [参考解答] 【项目3-max带来的冲突】 分析下面程序出现的
963 0
热门文章
最新文章
相关产品
云迁移中心
推荐文章
更多