——有時轉換函數更搭配友元函數、有時多餘的轉換函數會干擾友元函數的運行程序員
Stonewt operator + (const Stonewt &st1, cosnt Stonewt &st2) { double pds = st1.pounds + st2.pounds; Stonewt sum(pds); return sum; }
(友元函數)編程
Stonewt Stonewt::operator + (cosnt Stonewt &st) const { double pds = pounds + st.pounds; Stonewt sum(pds); return sum; }
(成員函數)函數
Stonewt jennySt(9, 12); // a Stonewt object Stonewt bennySt(12, 8); // a Stonewt object STonewt total; total = jennySt + bennySt;
上面任何一種符號重載格式都容許這樣作spa
Stonewt jennySt(9, 12); // a Stonewt object double kennyD = 176.0; // a double Stonewt total; total = jennySt + kennyD;
上面任何一種符號重載格式都容許這樣作,kennyD被轉換爲Stonewt對象對象
Stonewt jennySt(9, 12); // a Stonewt object double pennyD = 176.0; // a dobule Stonewt total; total = pennyD + jennySt; // friend function
只有友元函數才容許,由於double不能調用成員函數operator+()blog
另外,若是定義了operator double()成員函數,將形成混亂:內存
(依賴於隱式轉換)當給形參傳入非對象值時,將調用構造函數,生成臨時對象,並賦值給形參編譯器
即增長一個顯示地匹配類型的函數io
若是程序常常須要使用該可轉類類型的參數的函數操做(將與其它對象聯繫),則重載匹配的方法更合適;若是程序只是偶爾使用這種方法,則依賴於自動轉換更簡單,但爲了保險,能夠使用顯示轉換編譯