运算符重载与模版设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C H A N G Z H O U U N I V
E R S I T Y 实 验 报 告
实验课程名称: C++程序设计 本次实验是第 4 次, 名称为: 运算符重载与模版设计 学 生 姓 名: 胡宁 班 级 物联网171 学 号17488115 学 院(系)信息数理学院 指 导 教 师:朱家群 实 验 时 间: 2018 年 11 月 29 日
成 绩:
一、实验目标
1、;理解并运用运算符重载和模版设计
2、;
二、实验准备
1、通读课本运算符重载和模版设计的内容
2、
3、
4、
三、实验内容
用运算符重载实现两个复数的相加减
用模板类
四、实验步骤
#include <iostream>
using namespace std;
class Complex
{
private:
int a;
int b;
//全局函数重载+运算符
friend Complex operator+(Complex &c1, Complex &c2);
//重载前置++
friend Complex& operator++(Complex &c1);
friend Complex operator++(Complex &c1, int); public:
Complex(int a=0, int b=0)
{
this->a = a;
this->b = b;
}
void printCom()
{
cout<<a<<" + " << b << "i" <<endl;
}
public:
//成员函数法实现-运算符重载
Complex operator-(Complex &c2)
{
Complex tmp(this->a - c2.a, this->b - c2.b);
return tmp;
}
//前置--
Complex& operator--()
{
this->a --;
this->b --;
return *this;
}
//后置--
Complex operator--(int)
{
Complex tmp = *this;
this->a--;
this->b--;
return tmp;
}
};
//全局函数法实现+ 运算符重载
Complex operator+(Complex &c1, Complex &c2) {
Complex tmp(c1.a + c2.a, c1.b + c2.b);
return tmp;
}
//前置++
Complex& operator++(Complex &c1)
{
c1.a++;
c1.b++;
return c1;
}
//后置++
Complex operator++(Complex &c1, int)
{
//先使用在让c1加加
Complex tmp = c1;
//return c1;
c1.a ++;
c1.b ++;
return tmp;
}
/*
全局函数、类成员函数方法实现运算符重载步骤
1)要承认操作符重载是一个函数,写出函数名称
2)根据操作数,写出函数参数
3)根据业务,完善函数返回值(看函数是返回引用还是指针元素),及实现函数业务*/
int main()
{
Complex c1(1, 2), c2(3, 4);
//1 全局函数法实现+ 运算符重载
// Complex operator+(Complex &c1, Complex &c2);
Complex c3 = c1 + c2;
c3.printCom();
//2 成员函数法实现-运算符重载
//c1.operator-(c2);
//Complex operator-(Complex &c2)
Complex c4 = c1 - c2;
c4.printCom();
//前置++操作符用全局函数实现
++c1;
c1.printCom();
//前置--操作符成员函数方法
--c1;
c1.printCom();
//Complex& operator++(Complex &c1)
//c1.operator--();
//后置++操作符用全局函数实现
c1++;
c1.printCom();
//后置--操作符用成员函数实现
c1--;
c1.printCom();
//c1.operator--()
cout<<"hello..."<<endl;
return 0 ;
}
template<typename T>
class A
{
public:
A(T t)
{
this->t = t;
}
T &getT()
{
return t;
}
protected:
public:
T t;
};
void main()
{
//模板了中如果使用了构造函数,则遵守以前的类的构造函数的调用规则A<int> a(100);
a.getT();
printAA(a);
return ;
}
五、代码的运行调试
六、实验总结与体会
运算符重载使编程变得更加灵活,也使很多问题变得直观模版则提高了代码的重用率,使编程更加高效。