//在类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