运算符重载

//在类A中重载 !
//其中,ret为bool ret;成员变量
bool operator!()
{
  return !ret;
}
//A a(true); if(a){return true;}
//执行后为true.
//在类A中重载 数据类型B
//其中,ret为bool ret;成员变量
operator B()//不带返回值
{
  B b;
  return b; 
}
//A a(true);B b = a;
//如果不重载数据类型,直接赋值,由于没有相关规则,便会报错.
//注意:这里的数据类型可以是任何可实例化的数据类型,包括基本数据类型和复合数据类型.

重载运算符就是对运算符重新定义规则,如何改变规则只能在函数体中实现.因此不能改变运算符的优先级.

重载关键字 new delete也可以重载.

允许重载的运算符:

单目运算符 成员函数

= () [] ->    成员函数

+= -= *= /= %= *= ^= &= != <<= >>= 成员函数

其他双目运算符 + - * / %等 友元函数(加友元是为了访问private和protect成员,因此不需要也可以选择不加.)

不允许重载的运算符:

.             成员访问运算符
.*            成员指针访问运算符
::            作用域运算符
sizeof        长度运算符
typeid        类似sizeof
?:            条件运算符

A operatorB(){...}表示类内对B运算符进行重载,

A operator++(int){...}表示类内重载的是后置++.

C operator+(A a,B b){...}表示A类型+B类型时的重载.

1,当没有参数时,在类中表示运算符在第一位,类的对象在第二位.

2,当有一个非占位参数时,那么这个函数往往在类外,那么效果同1.

3,当有两个参数时,那么这个函数往往在类外,第一个参数必须在运算符左侧,第二个参数必须在运算符右侧.

如int operator(A &a,B &b){...},那么A a;B b;int c;c = a+b正确,c = b+a错误.

重载new与delete时格式是固定的:

void *operator new(size_t size){... return malloc(size);}

void operator delete(void *p){... }

用于局部重载时局部重载了new delete

用于全局重载时,原有new delete被屏蔽掉了,所有类型new delete均遵循新规则.因为new delete配对.new delete malloc free对于基本数据类型都一样,但对于对象则完全不同.对象严格遵循new delete new[] delete[]规则.

转载请注明出处:https://blog.csdn.net/qq_39937902/article/details/79386946



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值