【C++】5. 运算符的重载

1.(训练)数组类的封装

自己实现一个数组类.

2. 运算符重载

定义类的运算方法:提供成员/全局函数进行运算
  • 语法:
    1. 成员函数下:
      Person operator+(Person &p){};->p1+(p2)
    2. 全局函数下:
      Person operator+(Person &p1,Person &p2){};->(p1+p2)

3. <<,>>运算符重载

左移运算符的重载<<,实现cout<<p1打印p1
不能写在成员函数内.只能用全局
  • 第一个参数cout;第二个参数p1:(ostream &cout,Person &p1)
  1. 成员属性在public下:
ostream& operator<<(ostream &cout,Person & p1){  
    cout<<"a="<<p1.A<<"b="<<p1.B;  
    return cout;
}
  1. 成员属性在private下:(用友元)
    全局函数写法和1相同;在类内添加友元声明:
    friend ostream& operator<<(ostream &cout,Person & p1);

4. ++运算符重载

(1)前置

先+1,再返回值
  • 成员函数下重载的写法:
//前置++  
MyInt& operator++(){//++myInt  
    this->num++;  
    return *this;  
}
  • 左移运算符重载,这里忽略
  • 调用的写法:
    cout<< ++myInt << endl;

(2)后置

先返回值,再+1
用占位参数int
  • 成员函数下重载的写法:
//后置++  
MyInt operator++(int){//myInt++
    //先保存数据  
	MyInt tmp=*this;  
	//后加1  
	this->num++;  
	//返回没加1的值  
	return tmp;
}
  • 左移运算符重载,这里忽略
  • 调用的写法:
    cout<< myInt++ << endl;

5. 指针*,->运算符重载

智能指针的应用场景

(1)*

Person& operator*(){
	return *this->person;
}

(2)->

6.赋值=运算符重载

c++会给类提供默认的=号重载函数,但对于堆区内容有浅拷贝深拷贝的问题.

7.[ ]运算符重载

int& operator[](int index){return this->pAdress[index]};

8. 关系>=,= =,<=,!=运算符重载

bool operator==(Person &p){};

9. 函数调用()运算符重载

仿函数:调用与类名相同的函数Person(...);
重载写法:void operator()(...){};
注意:
- Person(,)这是仿函数
- Person()(,)这是先弄了匿名对象,然后匿名对象调用仿函数

10.不要重载&&和||运算符!

11.符号重载总结

=, [], () 和 -> 操作符只能通过成员函数进行重载
<< 和 >> 只能通过全局函数配合友元函数进行重载

  • 不要重载 && 和 || 操作符,因为无法实现短路规则
    ![[Pasted image 20221007123720.png]]

12. (训练)字符串的封装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值