三目运算符
对于条件表达式 a>b ? x : y,先计算条件b,然后进行判断。如果a>b 的值为true(1),计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。
其中a>b 部分,返回就是0,1,没有其他数;
C++运算符重载【1】运算符重载的目的:实现类的多态性。
【2】运算符重载的实质:函数重载,每个运算符对应各自的运算符函数,根据操作数的不同调用不同的同名函数。
【3】运算符重载语法:运算符的重载是通过对运算符
运算符函数名由关键字operate和重载的运算符组成:
类型类名::operate 重载的运算符(参数列表)
{
操作://……运算符处理程序代码
}
函数的参数个数是由以下两个因素决定:
该操作符是一元操作符还是二元操作符
当运算符重载为类的成员函数时,函数的参数个数比原有操作数个数要少一个(后置“++”,“--”除外),也就是说,一元操作符的参数个数为0,二元操作符的参数个数为1;而运算符重载为类的友元函数时,函数的参数个数与原有操作数个数相同(后置“++”,“--”除外),也就是说,一元操作符的参数个数为1,二元操作数的参数个数为2。这是因为,当重载为类的成员函数时,如果某个对象使用重载了成员函数,自身的数据可以直接访问,就不用再放在函数表中进行传递,这样该类本身也作为一个操作符参与了计算。
友元函数对某个对象的数据进行操作,就必须通过该对象的名字来进行,因此参数的使用必须进行传递,操作数的个数也就不会有所减少变化。
【4】运算符重载规则:
在C++中,除了5个运算符不能重置(“.”,“*指针”,“::”,“?:”,“sizeof”)之外,其余全部都可以重载。
运算符重载可以改变运算符原来的行为,但是重载之后运算符的优先性,结合性和操作数个数都不会改变,只能重载已有的运算符。
运算符重载后的功能与原有的功能相似,运算符重载函数的参数至少有一个必须是自定义类型。
在重载运算符“()”,“[]”,“->”或“=”时,运算符重载函数必须声明一个为类的一个成员,对于其他运算符,运算符重载函数可以是成员函数或者是友元函数。
【5】成员运算符函数:
eg: classcomplex
{
public:
complex(floatr=0,float i=0); // 构造函数
complexoperator+(const complex &op2) const; //重载运算符 +
complexoperator-(const complex &op2) const; //重载运算符-
complexoperator*(const complex &op2) const; //重载运算符*
voiddisplay() const; // 按数学写法输出复数
private:
floatreal;
floatimag;
};
complex::complex(float r,floati) // 构造函数
{ real=r; imag=i; }
complex complex::operator+(const complex &op2) const //重载运算符 +
{
float r=real+op2.real;
float i=imag+op2.imag;
returncomplex(r,i);
}
complex complex::operator-(const complex &op2) const //重载运算符 -
{
float r=real-op2.real;
float i=imag-op2.imag;
returncomplex(r,i);
}
complex complex:: operator*(const complex &op2) const //重载运算符 *
{
floatr=real*op2.imag-imag*op2.real;
floati=imag*op2.real+real*op2.imag;
returncomplex(r,i);}