作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [问题] operator overloading
时间Sat Dec 15 23:01:26 2007
这... 还没教吧? (是别班的人问的问题吗?)
Anyway...
return by object 是 make a copy of the caller's object.
底下 a.xxx().xxx() 会 OK 是因为你没有用到 caller's data member,
如果有的话, 你事实上第一个 xxx() 与第二个 xxx() 是不同 objects 在呼叫的.
而 operator >> 是要吃两个 operands, 其中第一个 operand (通常是cin or cout)
是要重复被使用, 所以 return object 的话就无法被重复了...
Anyway, 这个 (member function return by reference) 下个礼拜会讲到.
※ 引述《popo4231 (小泰)》之铭言:
: 为什麽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: 59.121.128.162