《关于C++中运算符的重载》
2016-04-18 14:36
288 查看
关于运算符重载,刚开始可能会觉得它特别简单,但是随着深入的学习,会发现自己了解的实在很少
比如说在重载“<<”和“>>”运算符时为什么返回值类型后边加&?为什么在传递参数的时候有时候加&有时不加?加&和不加&到底有什么区别?下面我们通过这个例子来分析一下
设向量X=(x1,x2,......,xn)和Y=(y1,y2,……,yn),
它们之间的加、减分别定义为:
X+Y=(x1+y1,x2+y2,……,xn+yn) X-Y=(x1-y1,x2-y2,……,xn-yn)
编程序定义向量类Vector ,重载运算符”+”、”-“、”=”,
实现向量之间的加、减和赋值运算;
用重载运算符”>>”、”<<”做向量的输入/输出操作。
注意检测运算的合法性。
#include<iostream>
using namespace std;
class Vector
{
public:
Vector();
Vector(double a,double b);
Vector operator+(Vector &);
Vector operator-(Vector &);
Vector& operator==(Vector &c)
{
x=c.x;
y=c.y;
return *this;
}
friend ostream & operator << (ostream &,Vector &);
friend istream & operator >> (istream &,Vector &);
void display();
private:
double x;
double y;
};
Vector::Vector()
{
x=0;
y=0;
}
Vector::Vector(double a,double b)
{
x=a;
y=b;
}
Vector Vector::operator+(Vector &a)
{
Vector add;
add.x=x+a.x;
add.y=y+a.y;
return add;
}
Vector Vector::operator-(Vector &b)
{
Vector sub;
sub.x=x-b.x;
sub.y=y-b.y;
return sub;
}
ostream & operator << (ostream &out,Vector &d)
{
out << d.x << " " <<d.y << endl ;
return out;
}
istream & operator >> (istream &in,Vector &e)
{
cin >> e.x >> e.y ;
return in;
}
void Vector::display()
{
cout << x << " " << y << endl ;
}
int main()
{
Vector c1(1.1,2.2),c2(3.3,4.4),c3(5.5,6.6),c4,t;
t=c1+c2; //重载+
t.display(); //显示结果
t=c3-c2; //重载-
t.display();
c2==c1; //重载=,讲C1中的值赋值给c2中的
c2.display(); //显示复制结果,应该与c1的值一样
cin >> c4 ;
cout << c4 ;
return 0;
}
在学习C语言时我们都把&叫做地址符,就是代表一个变量的地址,而在C++中它被称作“引用符”,相当于将一个变量取了一个别名,比如说你有一个小名,还有一个学名,这两个名字都代表你自己一样。在重载"<<"和">>"运算符时返回类型前边加&就是为了返回他的引用,这样可以连续输入或输出对象,如:cout << a <<b;(a,b都代表一个对象),而在传参的时候加&就是传递该对象的引用,这样是程序更简单,更直接。
比如说在重载“<<”和“>>”运算符时为什么返回值类型后边加&?为什么在传递参数的时候有时候加&有时不加?加&和不加&到底有什么区别?下面我们通过这个例子来分析一下
设向量X=(x1,x2,......,xn)和Y=(y1,y2,……,yn),
它们之间的加、减分别定义为:
X+Y=(x1+y1,x2+y2,……,xn+yn) X-Y=(x1-y1,x2-y2,……,xn-yn)
编程序定义向量类Vector ,重载运算符”+”、”-“、”=”,
实现向量之间的加、减和赋值运算;
用重载运算符”>>”、”<<”做向量的输入/输出操作。
注意检测运算的合法性。
#include<iostream>
using namespace std;
class Vector
{
public:
Vector();
Vector(double a,double b);
Vector operator+(Vector &);
Vector operator-(Vector &);
Vector& operator==(Vector &c)
{
x=c.x;
y=c.y;
return *this;
}
friend ostream & operator << (ostream &,Vector &);
friend istream & operator >> (istream &,Vector &);
void display();
private:
double x;
double y;
};
Vector::Vector()
{
x=0;
y=0;
}
Vector::Vector(double a,double b)
{
x=a;
y=b;
}
Vector Vector::operator+(Vector &a)
{
Vector add;
add.x=x+a.x;
add.y=y+a.y;
return add;
}
Vector Vector::operator-(Vector &b)
{
Vector sub;
sub.x=x-b.x;
sub.y=y-b.y;
return sub;
}
ostream & operator << (ostream &out,Vector &d)
{
out << d.x << " " <<d.y << endl ;
return out;
}
istream & operator >> (istream &in,Vector &e)
{
cin >> e.x >> e.y ;
return in;
}
void Vector::display()
{
cout << x << " " << y << endl ;
}
int main()
{
Vector c1(1.1,2.2),c2(3.3,4.4),c3(5.5,6.6),c4,t;
t=c1+c2; //重载+
t.display(); //显示结果
t=c3-c2; //重载-
t.display();
c2==c1; //重载=,讲C1中的值赋值给c2中的
c2.display(); //显示复制结果,应该与c1的值一样
cin >> c4 ;
cout << c4 ;
return 0;
}
在学习C语言时我们都把&叫做地址符,就是代表一个变量的地址,而在C++中它被称作“引用符”,相当于将一个变量取了一个别名,比如说你有一个小名,还有一个学名,这两个名字都代表你自己一样。在重载"<<"和">>"运算符时返回类型前边加&就是为了返回他的引用,这样可以连续输入或输出对象,如:cout << a <<b;(a,b都代表一个对象),而在传参的时候加&就是传递该对象的引用,这样是程序更简单,更直接。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性