轉換函數的特點:
(1)必須是類方法。
(2)沒有傳回值。
(3)沒有參數。
(4)隻能轉換為内置類型,不可以轉換為自定義類型。
<code>#include <iostream></code>
<code>using</code> <code>std::cout;</code>
<code>using</code> <code>std::endl;</code>
<code>class</code> <code>Stonewt</code>
<code>{</code>
<code>private</code><code>:</code>
<code> </code><code>enum</code> <code>{Lbs_per_stn = 10}; </code><code>// pounds per stone</code>
<code> </code><code>int</code> <code>stone; </code><code>// whole stones</code>
<code> </code><code>double</code> <code>pds_left; </code><code>// fractional pounds</code>
<code> </code><code>double</code> <code>pounds; </code><code>// entire weight in pounds</code>
<code> </code><code>void</code> <code>Show() </code><code>const</code><code>{</code>
<code> </code><code>cout << </code><code>"\t this = "</code> <code><< </code><code>this</code> <code><< </code><code>", (stone, pds_left) = ("</code> <code><< stone << </code><code>", "</code> <code><< pds_left << </code><code>"), pounds = "</code> <code><< pounds << endl;</code>
<code> </code><code>}</code>
<code>public</code><code>:</code>
<code> </code><code>//explicit Stonewt(double lbs); // constructor for double pounds</code>
<code> </code><code>Stonewt(</code><code>double</code> <code>lbs); </code><code>// constructor for double pounds</code>
<code> </code><code>Stonewt(</code><code>int</code> <code>stn, </code><code>double</code> <code>lbs); </code><code>// constructor for stone, lbs</code>
<code> </code><code>Stonewt(); </code><code>// default constructor</code>
<code> </code><code>Stonewt(</code><code>const</code> <code>Stonewt &st); </code><code>// copy constructor</code>
<code> </code><code>~Stonewt();</code>
<code> </code><code>Stonewt& operator=(</code><code>const</code> <code>Stonewt &st); </code><code>// copy constructor</code>
<code> </code><code>operator </code><code>double</code><code>()</code><code>const</code><code>;</code>
<code>};</code>
<code>// construct Stonewt object from double value</code>
<code>Stonewt::Stonewt(</code><code>double</code> <code>lbs)</code>
<code> </code><code>cout << </code><code>"enter "</code> <code><< __func__ << </code><code>"(double lbs)\n"</code><code>;</code>
<code> </code><code>stone = </code><code>int</code> <code>(lbs) / Lbs_per_stn; </code><code>// integer division</code>
<code> </code><code>pds_left = </code><code>int</code> <code>(lbs) % Lbs_per_stn + lbs - </code><code>int</code><code>(lbs);</code>
<code> </code><code>pounds = lbs;</code>
<code> </code><code>Show();</code>
<code> </code><code>cout << </code><code>"leave "</code> <code><< __func__ << </code><code>"(double lbs)\n"</code><code>;</code>
<code>}</code>
<code>// construct Stonewt object from stone, double values</code>
<code>Stonewt::Stonewt(</code><code>int</code> <code>stn, </code><code>double</code> <code>lbs)</code>
<code> </code><code>cout << </code><code>"enter "</code> <code><< __func__ << </code><code>"(int stn, double lbs)\n"</code><code>;</code>
<code> </code><code>stone = stn;</code>
<code> </code><code>pds_left = lbs;</code>
<code> </code><code>pounds = stn * Lbs_per_stn +lbs;</code>
<code> </code><code>cout << </code><code>"leave "</code> <code><< __func__ << </code><code>"(int stn, double lbs)\n"</code><code>;</code>
<code>Stonewt::Stonewt() </code><code>// default constructor, wt = 0</code>
<code> </code><code>cout << </code><code>"enter "</code> <code><< __func__ << </code><code>"()\n"</code><code>;</code>
<code> </code><code>stone = pounds = pds_left = 0;</code>
<code> </code><code>cout << </code><code>"leave "</code> <code><< __func__ << </code><code>"()\n"</code><code>;</code>
<code>Stonewt::Stonewt(</code><code>const</code> <code>Stonewt &st) </code><code>// copy constructor</code>
<code> </code><code>cout << </code><code>"enter "</code> <code><< __func__ << </code><code>"(const &)\n"</code><code>;</code>
<code> </code><code>stone = st.stone;</code>
<code> </code><code>pounds = st.pounds;</code>
<code> </code><code>pds_left = st.pds_left;</code>
<code> </code><code>cout << </code><code>"leave "</code> <code><< __func__ << </code><code>"(const &)\n"</code><code>;</code>
<code>Stonewt::~Stonewt() </code><code>// destructor</code>
<code>Stonewt& Stonewt::operator=(</code><code>const</code> <code>Stonewt &st)</code>
<code> </code><code>if</code><code>(</code><code>this</code> <code>== &st){</code>
<code> </code><code>cout << </code><code>"same object\n"</code><code>;</code>
<code> </code><code>return</code> <code>*</code><code>this</code><code>;</code>
<code> </code><code>return</code> <code>*</code><code>this</code><code>;</code>
<code>// conversion functions</code>
<code>Stonewt::operator </code><code>double</code><code>()</code><code>const</code>
<code> </code><code>return</code> <code>pounds; </code>
<code>int</code> <code>main(){</code>
<code> </code><code>Stonewt obj1 = 275; </code><code>// uses constructor to initialize</code>
<code> </code><code>obj1 = 276.8; </code><code>// uses constructor for conversion</code>
<code> </code><code>cout << </code><code>double</code><code>(obj1) << endl;</code>
測試結果:
enter Stonewt(double lbs)
this = 0x7fff20137160, (stone, pds_left) = (27, 5), pounds = 275
leave Stonewt(double lbs)
this = 0x7fff20137180, (stone, pds_left) = (27, 6.8), pounds = 276.8
enter operator=(const &)
this = 0x7fff20137160, (stone, pds_left) = (27, 6.8), pounds = 276.8
leave operator=(const &)
enter ~Stonewt()
leave ~Stonewt()
enter operator double()
leave operator double()
276.8
本文轉自FrankNie0101 51CTO部落格,原文連結:http://blog.51cto.com/frankniefaquan/1934950,如需轉載請自行聯系原作者