十一、C++复习——运算符重载
1 运算符类型
-
单目运算符:单目运算符是指运算所需变量为一个的运算符,又叫一元运算符,其中有逻辑非运算符:!、按位取反运算符:~、自增自减运算符:++, –等。
逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++, –】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*和&】、长度运算符【sizeof】
-
双目运算符:双目运算符就是对两个变量进行操作。双目运算符较多,+,-,*,/,=,== 等等
如:a + b中的+就是双目,因为操作数是a b两个
-
三目运算符:三目运算符对三个变量进行操作。,
b ? x : y
。
2 友元和成员函数重载运算符区别
-
成员函数重载运算符:当运算符重载作为类的成员函数时,该函数将被调用时自动传递一个隐式的
this
指针,指向调用对象的地址。这意味着成员函数重载的运算符可以访问类的私有成员变量,因为它们处于类的作用域中。但是,成员函数只能以调用对象作为左操作数,不能直接使用另一个对象调用。 -
友元函数重载运算符:友元函数被声明为类的友元后,可以访问类的私有成员,但不通过类的对象调用,而是作为参数传递给函数。友元函数可以在运算符重载时实现更多的灵活性,可以接受不同类型的参数,并且可以自定义实现运算符的行为。
-
通常,如果运算符需要直接访问类的私有成员或者以类的对象作为左操作数,则使用成员函数重载;如果需要更多的灵活性或者运算符不适合作为成员函数的情况,则使用友元函数重载。
-
如果友元和成员函数重载类型一样,优先调用成员函数重载运算符。
-
上图还用到了匿名对象转正,比如
c3 = c1 + c2
,运算符函数创建的局部变量会转正给全局变量c3,所以只会析构三次。