C++ Primer 笔记——重载运算与类型转换

14.1 基本概念

  • 重载的运算符是具有特殊名字的函数 operator[op_name];包含返回类型、参数列表以及函数体。
  • 运算符参数量与其运算对象数量相同。如果一个运算符是成员函数,那么它的第一个运算对象(左侧)绑定到隐式的this指针上。
  • 如果重载运算符,它要么是类的成员,要么至少含有一个类类型的参数(无法重载参数全部为内置类型的运算符)
  • 不可重载的运算符如下:
::.*.? :
  • operator的等价调用
a+b;
operator+(a,b);//非成员运算符,二者等价
a+=b;
a.operator+(b); //成员函数运算符,二者等价
  • 一般不重载运算符&& 和 || ,逗号运算符和取地址运算符。
  • 重载运算符时最好使用与内置类型一致的含义
  • 赋值和复合赋值运算符
  • 注意选择重载运算符函数作为类的成员或非成员

14.2 输入和输出运算符

14.2.1 重载输出运算符<<

<< 的第一个形参 一个非常量ostream的引用。
<< 的第二个形参 一个常量的引用,是打印的对象。
注意:

  • 输出运算符尽量减少格式化操作:例如换行符
  • 输入输出运算符必须是非成员函数。

14.2.2 重载输入运算符 >>

运算符 >>的第一个形参是将要读取的流的引用;
第二个形参是将要读入到非常量对象的引用。
注意:

  • 输入运算符需要判断输入是否成功,并处理输入失败的情况
  • 可以使用IO标准库来标识错误类型。

14.3 算数和关系运算符

关系运算符最好声明为非成员函数

14.3.1 相等运算符

== and !=

bool operator==(const classType &A, const classType &B){
	//compare each member
}
bool operator!=(const classType &A, const classType &B){
	//compare each member
}

14.3.2 关系运算符

  1. 定义顺序关系
  2. 区分==之外对象之间的关系,通常使用<。

14.4 赋值运算符

类似拷贝赋值运算符和移动赋值运算符,必须声明为成员函数。返回左侧对象的引用。

class A{
	A& operator=(/*param list*/){
		// ...
		return *this;
	}
	
	//复合赋值运算符
	A& operator+=(const A& rhs){
		///...
		return *this;
	}
};

14.5 下标运算符

表示容器的类通过下标运算符访问元素,operator[]
下标运算符通常返回两个版本:
1.返回普通引用
2.是类的常量成员,返回常量引用

class A{
public:
	int& operator[](std::size_t n){return element[n];};
	const int& operator[](std::size_t n) const
	{return element[n];};
private:
	int *elements;
};

14.6 递增和递减运算符

class A{
public:
	//前置运算符
	A& operator++(){
	}; // no params(一元运算符)
	A& operator--();//return *this;
	//后置运算符
	A operator++(int);
	A operator--(int);//先存this,然后 
};

14.7 成员访问运算符

解引用运算符*
箭头运算符->

string &A::operator*() const{
	auto p = check();//
	return (*p)[curr];
}
string &A::operator->() const{
	return this->operator*();
}

14.8 函数调用运算符

():将对象当作函数使用,函数对象常常可以用作泛型算法的实参,例如for_each(v.begin(),v.end(),printer(cerr,'\n'));

class A{
	void operator()(const string &s){
		//operations...
	}
}

14.8.1 lambda是函数对象

lambda表达式:

在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值