C++中,重载与普通函数有两个区别:
语法不同,如果运算符处于两个参数之间或者参数之后,那么它将会被调用。
编译器决定哪个函数将会被调用,例如:如果使用浮点加运算,那么编译器就会调用执行浮点加法运算函数,如果一个参数为整型,编译器会调用一个特殊的函数来将整型转换为浮点型。
有些重载函数必须为成员函数,有些可以是成员函数或者友元函数
C++中,可能定义一个新的操作符在类之间进行操作,这些操作就像正常函数定义一样,出了在操作符之前加上关键字operator,一样,编译器会自动决定类型的转换来调用定义的操作符重载。
C++重载语法:
大致定义的语法为:operator
@,@就为被重载的运算符,重载的参数列表依赖于下面两个因素:
是否为一元运算符(一个参数)还是二元运算符(两个参数)
是否定义的是全局函数(一元运算符一个参数,二元运算符两个参数operator@(a,b)),还是成员函数(一元操作符无参数,二元操作符一个参数-这样对象就成为了左参数a.operator@(b))。
- 1 #include <iostream>
-
2 using namespace std;
-
3 class Integer
-
4 {
-
5 int i;
-
6 public:
-
7 Integer(int ii):i(ii){}
-
8 const Integer operator+(const Integer& rv)const
-
9 {
-
10 cout<<"operator + rv.i:"<<rv.i<<endl;
-
11 return Integer(i+rv.i);
-
12 }
-
13 Integer& operator+=(const Integer& rv){
-
14
-
15 cout<< "operator++ rv.i:"<<rv.i <<endl;
-
16 i +=rv.i;
-
17 return *this;
-
18 }
-
19 };
-
20 int main()
-
21 {
-
22 cout<<"built-in types:"<<endl;
-
23 int i=1,j=2,k=3;
-
24 k += i+j;
-
25 cout<<"user-defined types:"<<endl;
-
26 Integer ii(1),jj(2),kk(3);
-
27 kk += ii+jj;
-
28 return 0;
-
29 }
编译运行:
- built-in types:
-
user-defined types:
-
operator + rv.i:2
-
operator++ rv.i:3
当对象作为形参进行传递时,类的成员函数是可以访问对象私有成员变量。
1.至于函数参数如果不对其进行修改就定义为const类型。
2.如果函数是类成员就可以定义为const类成员
3.返回类型的选择取决于重载操作符的类型,如果返回对象则可以进行返回临时性对象,这样不失为性能优化。
阅读(1326) | 评论(0) | 转发(0) |