操作符重载的基本语法
所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋
予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的
函数,也就是”一名多用”。
运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重
载。例如,大家都已习惯于用加法运算符”+”对整数、单精度数和双精度数进行
加法运算,如5+8,5.8+3.67等,其实计算机对整数、单精度数和双精度数的
加法操作过程是很不相同的,但由于C++已经对运算符”+”进行了重载,所以就能适用于int,float,
double类型的运算。
又如”<<“是C的位运算中的位移运算符(左移),但在输出操作中又是与流对象cout配合使用的流插入运算符,”>>“也是位移运算符(右移),但在输入操作中又是与流对象cin配合使用的流提取运算符。这就是运算符重载(operator overloading)。C系统对”<<“和”>>“进行了重载,用户在不同的场合下
使用它们时,作用是不同的。对”<<“和”>>“的重载处理是放在头文件stream中的。因此,如果要在程序中用”<<“和”>>”作流插入运算符和流提取运算符,必须在本文件模块中包含头文件stream(当然还应当包括”using namespace std“)。
现在要讨论的问题是:用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用.
运算符重载的本质是函数重载。
重载函数的一般格式如下:

operator 运算符名称 在一起构成了新的函数名。比如

我们会说,operator+ 重载了运算符+。
友元重载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #define _CRT_SECURE_NO_WARNINGS #include<iostream>
using namespace std;
class A { public: A(); A(int ta,int tb); ~A(); void print(); friend const A & operator+(const A &ta1, const A &ta2); int getA() { return a; } int getB() { return b; } private: int a; int b; };
void A::print() { cout << a << endl; cout << b << endl; } A::A(int ta,int tb) { a = ta; b = tb; } A::A() { }
A::~A() { }
const A & operator+(const A &ta1,const A &ta2) {
return A(ta1.a + ta2.a,ta1.b + ta2.b); } int main(char *argv[], int argc) { A a1(1,2); A a2(3, 4); A a3 = a1 + a2; a3.print(); return 0; }
|
成员重载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #define _CRT_SECURE_NO_WARNINGS #include<iostream>
using namespace std;
class A { public: A(); A(int ta, int tb); ~A(); void print(); const A operator+(const A & anotherA); int getA() { return a; } int getB() { return b; } private: int a; int b; };
const A A::operator+(const A & anotherA) { return A(this->a + anotherA.a, this->b + anotherA.b); } void A::print() { cout << a << endl; cout << b << endl; } A::A(int ta, int tb) { a = ta; b = tb; } A::A() { }
A::~A() { }
int main(char *argv[], int argc) { A a1(1, 2); A a2(3, 4); A a3 = a1 + a2; a3.print(); return 0; }
|
