1. 程式人生 > >2.練習友元函式與前向宣告

2.練習友元函式與前向宣告

//實現 <<過載
//信類,傳送中轉類(郵局類)
//過載<<實現,將信件發給郵局類,讓郵局傳送輸出

//方式1過載函式是類的成員函式,
//通過友元函式實現
//通過友元類實現。

//方式2友元函式是全域性

 

#include <iostream>
#include <string>
//Sender類在上,Mail類在下
using namespace std;

class Mail;
class Sender//郵局類
{
public:
#if 1
    Sender(string a = nullptr)
        :_addr(a)
    {
    }
#endif

#if 0
    Sender(string const &a = nullptr)
        :_addr(a)
    {
    }
#endif
    ostream& operator<<(Mail const & m);

private:
    string _addr;
};

class Mail//信件類
{
    friend ostream& Sender::operator<<(Mail const& m);
public:
#if 1
    Mail(string t = nullptr,string c = nullptr)
        :_title(t),_content(c)
    {
    }
#endif
#if 0
    Mail(string const &t = nullptr,string const &c = nullptr)//問題1:這樣該怎麼理解?
        :_title(t),_content(c)
    {
    }
#endif

private:
    string _title;
    string _content;
};

ostream& Sender::operator<<(Mail const & m)
{
    cout<<"addr:"<<this->_addr<<endl;
    cout<<"Mail:"<<m._title<<m._content<<endl;
    return cout;
}

int main()
{
    Mail m("tttttt","asdasdasdas");
    Sender s("china");
 //   s<<m<<"uiuioiuoiu"<<endl;//問題2,這個怎麼可以?
  //  s<<"uiouioiuou";//這個怎麼不行了?
    return 0;
}