三、友元
通常情况下,公有类方法是访问类的唯一途径,有时不方便,于是我们诞生了另外一种形式的访问权限:友元
分为三类:
- 友元函数
- 友元类
- 友元成员函数
1、创建友元函数
1 | friend Time operator*(const Time & t, double m); |
放在类声明中,加上关键字friend
- 虽然是在类声明中声明的,但是并不是成员函数
- 与成员函数的访问权限相同
2、常用的友元:重载<<运算符
(1)第一种重载版本
1 | Time operator<<(ostream &os, const Time & t) { |
(2)第二种重载版本
如果使用第一种重载版本,如下语句就会发生异常
1 | cout << time << "time" << endl; |
所以我们采用如下方式,让其返回ostream
对象引用即可:
1 | ostream & operator<<(ostream &os, const Time & t) { |
只有在类声明的原型中才能使用friend关键字,否则函数定义也是原型,否则不能在函数定义中使用该关键字
六、类的自动转换和强制类型转换
内置类型转换:如果两种类型兼容,则会自动转换为接收类型的变量的类型
不自动转化不兼容的类型,如下是非法的:
1 | int *p = 10 |
但是可以强制类型转化
1 | int *p = (int *)10 |