天天看点

类的转换函数

转换函数的特点:

(1)必须是类方法。

(2)没有返回值。

(3)没有参数。

(4)只能转换为内置类型,不可以转换为自定义类型。

<code>#include &lt;iostream&gt;</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 &lt;&lt; </code><code>"\t this = "</code> <code>&lt;&lt; </code><code>this</code> <code>&lt;&lt; </code><code>", (stone, pds_left) = ("</code> <code>&lt;&lt; stone &lt;&lt; </code><code>", "</code> <code>&lt;&lt; pds_left &lt;&lt; </code><code>"), pounds = "</code> <code>&lt;&lt; pounds &lt;&lt; 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 &amp;st);         </code><code>// copy constructor</code>

<code>    </code><code>~Stonewt();</code>

<code>    </code><code>Stonewt&amp; operator=(</code><code>const</code> <code>Stonewt &amp;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 &lt;&lt; </code><code>"enter "</code> <code>&lt;&lt; __func__ &lt;&lt; </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 &lt;&lt; </code><code>"leave "</code> <code>&lt;&lt; __func__ &lt;&lt; </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 &lt;&lt; </code><code>"enter "</code> <code>&lt;&lt; __func__ &lt;&lt; </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 &lt;&lt; </code><code>"leave "</code> <code>&lt;&lt; __func__ &lt;&lt; </code><code>"(int stn, double lbs)\n"</code><code>;</code>

<code>Stonewt::Stonewt()          </code><code>// default constructor, wt = 0</code>

<code>    </code><code>cout &lt;&lt; </code><code>"enter "</code> <code>&lt;&lt; __func__ &lt;&lt; </code><code>"()\n"</code><code>;</code>

<code>    </code><code>stone = pounds = pds_left = 0;</code>

<code>    </code><code>cout &lt;&lt; </code><code>"leave "</code> <code>&lt;&lt; __func__ &lt;&lt; </code><code>"()\n"</code><code>;</code>

<code>Stonewt::Stonewt(</code><code>const</code> <code>Stonewt &amp;st)  </code><code>// copy constructor</code>

<code>    </code><code>cout &lt;&lt; </code><code>"enter "</code> <code>&lt;&lt; __func__ &lt;&lt; </code><code>"(const &amp;)\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 &lt;&lt; </code><code>"leave "</code> <code>&lt;&lt; __func__ &lt;&lt; </code><code>"(const &amp;)\n"</code><code>;</code>

<code>Stonewt::~Stonewt()         </code><code>// destructor</code>

<code>Stonewt&amp; Stonewt::operator=(</code><code>const</code> <code>Stonewt &amp;st)</code>

<code>    </code><code>if</code><code>(</code><code>this</code> <code>== &amp;st){</code>

<code>        </code><code>cout &lt;&lt; </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 &lt;&lt; </code><code>double</code><code>(obj1) &lt;&lt; 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 &amp;)

         this = 0x7fff20137160, (stone, pds_left) = (27, 6.8), pounds = 276.8

leave operator=(const &amp;)

enter ~Stonewt()

leave ~Stonewt()

enter operator double()

leave operator double()

276.8

      本文转自FrankNie0101 51CTO博客,原文链接:http://blog.51cto.com/frankniefaquan/1934950,如需转载请自行联系原作者

继续阅读