函数重载
函数重载与java类似,是指在一个类中,拥有相同的函数名,不同的参数的函数(包括数量,顺序不同),编译器会根据参数的不同,调用不同的函数,他们的返回值也可以不同。
补充一点:重写是返回值,函数名,参数都相同,实现的功能不同(也就是内部代码不同)的函数。一般用在继承中,子类重写父类函数。
运算符重载
重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。
重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
运算符重载:Box operator+(const Box&) ;Box operator+(const Box&, const Box&);
实际测试中,可以不采用引用传递,采用值传递也可以实现以下实列,网上找到资料中,有友元函数重载运算符的方式,很有借鉴性。
值得注意的是:
- 1、运算重载符不可以改变语法结构。
- 2、运算重载符不可以改变操作数的个数。
- 3、运算重载符不可以改变优先级。
- 4、运算重载符不可以改变结合性。
#include<iostream>
#include<stdlib.h>
using namespace std;
/*
函数重载和运算符重载
*/
class Point {
public:
double x, y;
Point(double x, double y); //构造函数
//Point(); //构造函数
void PointSay();
void PointSay(Point point); //函数的重载
Point operator-(); //- 运算符重载,一元运算符的重载
Point operator+(Point point); //+ 二元运算符重载。
//以友元函数的方式重载函数,这让该函数为全局函数。 本实列中,会与operator+冲突,所以注释掉了
//friend Point operator+(Point point1, Point point2);
};
Point::Point(double x, double y) {
this->x = x;
this->y = y;
}
void Point::PointSay() {
cout << "this is a Point" << endl;
}
void Point::PointSay(Point point) {
cout << "Point x,y:" << point.x << "," << point.y << endl;
}
Point Point::operator-() {
this->x = -x;
this->y = -y;
return Point(x, y);
}
Point Point::operator+(Point point) {
Point point1(0,0);
point1.x = this->x + point.x;
point1.y = this->y + point.y;
return point1;
}
/*Point operator+(Point point1, Point point2) {
Point point(0, 0);
point.x = point1.x + point2.x;
point.y = point1.y + point2.y;
return point;
}*/
int main() {
Point point(3, 4);
Point point11(1,1);
point.PointSay(point);
-point;
point.PointSay(point);
//point-; 会报错。
//--point; 会报错
Point pointadd = point + point11; //相当于point.operator+(point11);
point.PointSay(pointadd);
system("pause");
return 0;
}