由于友元不是成员函数,所以不能使用作用域解析操作符来指出要使用哪个函数。解决方法是使用强制类型转换,以便匹配原型时能够选择正确的函数。
基类:
class class_a
{
private:
int x;
public:
...
friend std::ostream & operator<<(std::ostream & os,const class_a & rs);
...
};
std::ostream & operator<<(std::ostream & os,const class_a & rs)
{
os<<"class_a: "<<rs.x<<std::endl;
return os;
}
派生类
class class_b:public class_a
{
private:
int b;
public:
...
friend std::ostream & operator<<(std::ostream & os,const class_b & rs);
...
};
std::ostream & operator<<(std::ostream & os,const class_b & bs)
{
os<<"class_a: "<<(const class_a &) bs;
os<<"class_b b: "<<bs.b<<std::endl;
return os;
}
可以理解为,友元函数重载,通过强制类型转换参数来匹配函数特征标,续而调用正确的函数。
友元函数的重载与强制类型转换
本文探讨了友元函数如何通过强制类型转换实现重载,并解释了其在类之间的相互作用中扮演的角色。
649

被折叠的 条评论
为什么被折叠?



