在c++中运算符重载通过两种方式:1.友元函数的方式 2.成员函数的方式
五种运算符不可以重载 点运算符. 域名解析符:: 点星运算符.* 三目运算符:? 求大小运算符sizeof
不能使用成员重载的运算符>> <<
不能通过友元的方式重载的运算符 赋值运算符= 括号运算符()下标运算符 [] 箭头运算符->
双目运算符推荐使用友元 单目运算符 推荐使用成员
友元函数是单项传递的 A是B的友元类 在B中不申明 ,B不是A的友元类 A是B的友元类 B是C的友元类 A不一定是C的友元类 需要在C中申明
友元方法和成员方法的区别是 友元方法不能使用this调用成员变量而成员方法可以调用this
1 #pragma once
2 #include<iostream>
3 using namespace std;
4 class A
5 {
6 int data;
7 static int x;
8 int arr[10];
9 public:
10 A(int data = 0);//构造函数,可缺省
11 A(const A&other);//调用拷贝构造
12 ~A();
13 int getData();
14 void setData(int data);
15 friend int addA(const A&a, const A&b);//在申明的时候使用友元在类外定义
16 friend A operator+(const A&a, const A&b);//通过友元 运算符加法重载
17
18 A operator-(const A&b);//通过成员的方法重载减号运算符通过this
19 A operator-()//重载负号运算符
20 {
21 A C;
22 C.data = -this->data;
23 return 0;
24 }
25
26 A& operator++(){//前加加运算符 通过返回值修改这个对象
27 ++this->data;
28 return *this;//返回当前对象
29 }
30 A operator++(int)//区分于前++ 里面放一个参数表示后++
31 {
32 A c(this->data);//c保存A的数据
33 ++this -> data;//data自增
34 return c;//c返回之前保存的数据
35 }
36 //重载输出输入运算符
37 friend ostream& operator<<(ostream& is,const A& a)//引用a防止被修改加上const
38 {
39 is << a.data;
40 return os;
41 }
42 friend istream& operator>>(istream& is, A& a)//不加const表可以修改a的值,a的值为键盘输入的值
43 {
44 is >> a.data;
45 return is;
46 }
47 int& operator*() //重载解引用运算符
48 {
49 return *arr;
50 }
51 int& operator[](int index) //重载下标运算符
52 {
53 return arr[index];
54 }
55
56 operator bool() //强转bool类型 没有返回值类型
57 {
58 return arr[0] == 0;//函数体按照自己的需求写就行
59 }
60 };
头文件中通过类A申明需要使用的重载运算符
1 #include "A.h"
2
3
4 A::A(int data)
5 {
6 this->data = data;//将形参值给类中私有变量使用
7 }
8 A::A(const A&other)
9 {
10 data = other.data;//调用不可修改的other给类内赋值
11 }
12
13
14 A::~A()
15 {
16 }
17 int A::getData() //get方法
18 {
19 return data;
20 }
21
22 void A::setData(int data)//set方法
23 {
24 this->data = data;
25 }
26 int addA(const A& a, const A& b)
27 {
28 return a.data + b.data;//通过对象访问私有成员返回私有成员 类似于两个对象相加 引入加发运算符的重载
29 }
30
31 A operator+(const A& a, const A& b)//使用友元方法对加法运算符重载
32 {
33 A c;
34 c.data = a.data + b.data;
35 return c;
36 }
37 A A::operator-(const A&b)//利用成员方法 对运输符进行重载
38 {
39 A c;
40 c.data = this->data - b.data;
41 return c;
42 }
在A.cpp文件中在类外定义需要使用到的函数以及重载运算符