十九 成员指针(了解)
1成员变量指针
1)定义
- 类型 类名::*指针变量名 = &类名::成员变量;
2)使用方法
- 对像.*成员指针变量名;
- 对象指针->*成员指针变量名;
“.*”:成员指针接引用运算符
“->”:间接成员指针解引用运算符
注意:成员变量指针本质是类中特定成员在对像中的相对位置!
2、成员函数指针
1)定义
- 返回类型 (类名::*成员函数指针)(形参表) = &类名::成员函数名;
2)使用方法
- (对象.*成员函数指针)(实参表);
- (对象指针->*成员函数指针)(实参表)
二十 操作符重载
1、双目操作符的重载 L#R
1.1 运算类双目操作符
eg:实现两个复数相加:(1 + 2i) + (3 + 4i) = 4 + 6i
- => 表达是的结果为右值
- => 左右操作数既可以为左值也可以为右值
- => 实现方式:
- 1) 成员函数形式
L#R的表达式可以被编译器翻译成L.operator#(R)的成员函数调用的形式,该函数的返回结果就是表达式的值。- 2)全局函数形式
L#R的表达式也可以被编译器翻译成::operator#(L#R)的全局函数调用形式,该函数的返回结果就是表达式的值。
注意:通过friend关键字,可以把一个全局函数声明为某个类的友元函数,在友元函数中可以访问类中的任何成员。
1.2 赋值类双目操作符
- =>左操作数必须是左值
- =>右操作符可以是左值也可以是右值
- =>表达式的值是一个左值,而且就是左操作数的自身
- =>实现方式:
- 1)成员函数形式
L#R==》 L.operator#(R)- 2)全局函数形式
L#R==》 ::operator#(L,R)
2、单目操作符的重载 #O
2.1 计算类的单目操作符: -(取负) !~
- =>操作数既可以是左值也可以是右值
- =>表达式返回结果是右值
- =>实现方式:
- 1)成员函数形式
L#R==》 O.operator#()- 2)全局函数形式
L#R==》 ::operator#(O)
2.2 自增减运算符:
- => 前缀自增减
操作数是左值,返回值也是左值(就是操作数自身)实现方法:
- 1)成员函数形式:#O-》O.operator#();
- 2)全局函数形式:#O-》operator#(O);
=> 后缀自增减
操作数是左值,返回值是右值(返回自增加前的数值)- 实现方法:
- 1)成员函数形式:#O-》O.operator#(int/哑元参数/);
- 2)全局函数形式:#O-》operator#(O,int/哑元参数/);
3 插入和提取操作符 << >>
功能:实现自定义类型的输出和输入的操作
注意:只能用全局函数形式(friend)实现
#include <iostream>
ostream cout;
istream cin;
friend ostream& operator<<(ostream& os,const RIGHT& right);
friend istream& operator>>(ostream& os,const RIGHT& right);
eg:
//cout.operator<<(a);
//operator<<(cout,a);
cout << a << endl;
cout << a << b << endl;