天天看點

C++一進制運算符重載

<code>#include &lt;iostream&gt;</code>

<code>using</code> <code>namespace</code> <code>std;</code>

<code>class</code> <code>Integer {</code>

<code>  </code><code>long</code> <code>i;</code>

<code>  </code><code>Integer* This() { </code><code>return</code> <code>this</code><code>; }</code>

<code>public</code><code>:</code>

<code>  </code><code>Integer(</code><code>long</code> <code>ll = 0) : i(ll) {}</code>

<code>  </code><code>// No side effects takes const&amp; argument:</code>

<code>  </code><code>friend</code> <code>const</code> <code>Integer&amp;</code>

<code>    </code><code>operator+(</code><code>const</code> <code>Integer&amp; a);</code>

<code>  </code><code>friend</code> <code>const</code> <code>Integer</code>

<code>    </code><code>operator-(</code><code>const</code> <code>Integer&amp; a);</code>

<code>    </code><code>operator~(</code><code>const</code> <code>Integer&amp; a);</code>

<code>  </code><code>friend</code> <code>Integer*</code>

<code>    </code><code>operator&amp;(Integer&amp; a);</code>

<code>  </code><code>friend</code> <code>int</code>

<code>    </code><code>operator!(</code><code>const</code> <code>Integer&amp; a);</code>

<code>  </code><code>// Side effects have non-const&amp; argument:</code>

<code>  </code><code>// Prefix:</code>

<code>    </code><code>operator++(Integer&amp; a);</code>

<code>  </code><code>// Postfix:</code>

<code>    </code><code>operator++(Integer&amp; a, </code><code>int</code><code>);</code>

<code>    </code><code>operator--(Integer&amp; a);</code>

<code>    </code><code>operator--(Integer&amp; a, </code><code>int</code><code>);</code>

<code>};</code>

<code>// Global operators:</code>

<code>const</code> <code>Integer&amp; operator+(</code><code>const</code> <code>Integer&amp; a) {</code>

<code>  </code><code>cout &lt;&lt; </code><code>"+Integer\n"</code><code>;</code>

<code>  </code><code>return</code> <code>a; </code><code>// Unary + has no effect</code>

<code>}</code>

<code>const</code> <code>Integer operator-(</code><code>const</code> <code>Integer&amp; a) {</code>

<code>  </code><code>cout &lt;&lt; </code><code>"-Integer\n"</code><code>;</code>

<code>  </code><code>return</code> <code>Integer(-a.i);</code>

<code>const</code> <code>Integer operator~(</code><code>const</code> <code>Integer&amp; a) {</code>

<code>  </code><code>cout &lt;&lt; </code><code>"~Integer\n"</code><code>;</code>

<code>  </code><code>return</code> <code>Integer(~a.i);</code>

<code>Integer* operator&amp;(Integer&amp; a) {</code>

<code>  </code><code>cout &lt;&lt; </code><code>"&amp;Integer\n"</code><code>;</code>

<code>  </code><code>return</code> <code>a.This(); </code><code>// &amp;a is recursive!</code>

<code>int</code> <code>operator!(</code><code>const</code> <code>Integer&amp; a) {</code>

<code>  </code><code>cout &lt;&lt; </code><code>"!Integer\n"</code><code>;</code>

<code>  </code><code>return</code> <code>!a.i;</code>

<code>// Prefix; return incremented value</code>

<code>const</code> <code>Integer&amp; operator++(Integer&amp; a) {</code>

<code>  </code><code>cout &lt;&lt; </code><code>"++Integer\n"</code><code>;</code>

<code>  </code><code>a.i++;</code>

<code>  </code><code>return</code> <code>a;</code>

<code>// Postfix; return the value before increment:</code>

<code>const</code> <code>Integer operator++(Integer&amp; a, </code><code>int</code><code>) {</code>

<code>  </code><code>cout &lt;&lt; </code><code>"Integer++\n"</code><code>;</code>

<code>  </code><code>Integer before(a.i);</code>

<code>  </code><code>return</code> <code>before;</code>

<code>// Prefix; return decremented value</code>

<code>const</code> <code>Integer&amp; operator--(Integer&amp; a) {</code>

<code>  </code><code>cout &lt;&lt; </code><code>"--Integer\n"</code><code>;</code>

<code>  </code><code>a.i--;</code>

<code>// Postfix; return the value before decrement:</code>

<code>const</code> <code>Integer operator--(Integer&amp; a, </code><code>int</code><code>) {</code>

<code>  </code><code>cout &lt;&lt; </code><code>"Integer--\n"</code><code>;</code>

<code>int</code> <code>main() {</code>

<code>  </code><code>Integer a;</code>

<code>  </code><code>+a;</code>

<code>  </code><code>-a;</code>

<code>  </code><code>~a;</code>

<code>  </code><code>Integer* ip = &amp;a;</code>

<code>  </code><code>!a;</code>

<code>  </code><code>++a;</code>

<code>  </code><code>a++;</code>

<code>  </code><code>--a;</code>

<code>  </code><code>a--;</code>

<code>  </code> 

<code>  </code><code>return</code> <code>0;</code>

<code>} </code><code>///:~</code>

<code></code>

      本文轉自FrankNie0101 51CTO部落格,原文連結:http://blog.51cto.com/frankniefaquan/1934028,如需轉載請自行聯系原作者

繼續閱讀