作者popo4231 (小泰)
看板EE_DSnP
标题[问题] operator overloading
时间Sat Dec 15 22:27:24 2007
为什麽operator overloading函式一定要回传ostream&
回传ostream会compile error
可是在cascading call的时候就不会有这种情形发生
请问问题是出在哪边?
code:
#include<iostream>
#include<iomanip>
using namespace std;
class student
{
friend istream operator>>(istream&,student&);
friend ostream operator<<(ostream&,student&);
private:
int num;
char ch;
string str;
};
istream operator>>(istream& input,student& stu)
{
input>>setw(2)>>stu.num;
input.ignore(1);
input>>setw(1)>>stu.ch;
input.ignore(3);
input>>setw(10)>>stu.str;
return input;
}
ostream operator<<(ostream& output,student& stu)
{
output<<stu.num<<' '<<stu.ch<<" "<<stu.str<<endl;
return output;
}
int main()
{
student S;
cin>>S;
cout<<S;
system("pause");
return 0;
}
只要把回传型态改成reference就可以过了
但是cascading就可以回传object而不用回传reference
code:
#include<iostream>
using namespace std;
class A
{
public:
A xxx(void)
{
cout<<"xd囧"<<endl;
return (*this);
}
};
int main()
{
A a;
a.xxx().xxx();
system("pause");
}
为什麽会这样呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.241.177