chi*_*aja 4 c++ operator-overloading friend-function
经过长时间的差距,我正在刷新cpp,试图理解运算符重载方法.我试图重载"operator <<"来输出对象的成员.但是如果不使用朋友功能,我无法这样做.我正在寻找一种不使用友元功能的方法.
这是我的班级def:
class Add{
private:
int x;
public:
friend ostream& operator<<(ostream& ostr, Add const& rhs); //Method 1
void operator<<(ostream& ostr); //Method 2
};
Run Code Online (Sandbox Code Playgroud)
功能实现
//Method 1
ostream& operator<<(ostream &ostr, Add const& rhs)
{
ostr<<rhs.x;
return ostr;
}
//Method 2
void Add::operator<<(ostream& ostr)
{
cout<<" using operator<< \n";
ostr<<x;
}
Run Code Online (Sandbox Code Playgroud)
来自main函数的调用
cout<<Obj_Add; //calls the Method 1
Obj_Add<<cout; //calls the Method 2
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,我想在不使用friend函数的情况下实现方法1类型调用.但是不知道,cpp是否有可能.我尝试了很少的实现,但都给了我编译错误.请帮助我理解我在这里缺少的观点.
如果你的课程中有公共访问者功能,或类似stream的功能,你不需要友谊operator<<:
// v1
class foo{
public:
int data() const{ return _data; }
private:
int _data;
};
std::ostream& operator<<(std::ostream& o, foo const& f){
return o << f.data();
}
// v2
class foo{
public:
void stream_to(std::ostream& o){
o << _data;
}
private:
int _data;
};
std::ostream& operator<<(std::ostream& o, foo const& f){
f.stream_to(o);
return o;
}
Run Code Online (Sandbox Code Playgroud)
v2具有允许stream_to成为virtual函数的额外好处,这对多态基类有帮助,因此您不需要operator<<为每个派生类重新实现stream_to.
| 归档时间: |
|
| 查看次数: |
7915 次 |
| 最近记录: |