-
为什么要对运算符重载?
答:运算符可对一些基本的数据类型进行计算,若想让对象之间实现计算(如实现复数相加),需要用到运算符重载。运算符重载实质是函数重载,是对一个已有的函数赋予新的含义,实现新的功能。运算符重载可使程序易于编写、阅读和维护。 -
怎样进行运算符的重载?
答:一般格式如下:
函数类型 operator 运算符名称 (形参表)
{对运算符的重载处理}
例如:
Complex operator + (Complex& c1,Complex& c2);
-
重载运算符的规则?
答:①c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重载。
②c++允许绝大部分的运算符重载,只有5个不可以重载:
成员访问运算符(.)成员指针访问运算符(*)、域运算符(::)、长度运算符(sizeof)、条件运算符(?:)
③重载不能改变运算符运算对象(即操作数)的个数。
④重载不能改变运算符的优先级别。
⑤重载不能改变运算符的结合性。
⑥重载运算符的函数不能有默认的参数。
⑦重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。
⑧用于类对象的运算符一般必须重载,但“=”和“&”不必用户重载。 -
为什么流插入<<和流提取运算符>>不能定义为类的成员函数?
答:如果定义为类的成员函数,则隐含了this指针,即第一个形参(运算符左侧的操作数)是本类的对象,如下:
ostream& Complex::operator << (ostream& cout){}
此时输出结果:data<<cout,不符合习惯。
故流插入<<和流提取运算符>>只可作为全局函数。
(如果运算符函数重载为成员函数,它的第一个参数必须是本类的对象。当第一个操作数不是类对象时,不能将运算符函数重载为成员函数。)
(返回值类型为ostream&,可实现链式编程)
-
递增运算符前置和后置的重载有何不同?
答:b=a++是先把a值赋给b,a再加一
b=++a是a先加一,再把a值赋给b
后置重载相比于前置重载,需加一个int占位符。后置还需先把初值存起来,加一,然后返回记录的初值。 -
什么时候用值传递,什么时候用引用传递?
答:当在函数内部定义了一个临时对象,这个临时对象在函数结束的时候会被释放,若用引用,找不到空间,就会出错,故当存在临时对象时,应用值传递。
除了上述情况,建议采用引用传递,可节省空间。
参考书籍:谭浩强的《c++面向对象程序设计(第二版)》