<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>operator overloading return question</title>
		<link>http://www.allegro.cc/forums/view/609148</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 01 Jan 2012 09:11:56 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m using codeblocks/mingw gcc as my compiler and for the following code I&#39;m getting a warning.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">class</span> number
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>  private:
<span class="number">  7</span>
<span class="number">  8</span>    <span class="k1">int</span> value<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>  public:
<span class="number"> 11</span>
<span class="number"> 12</span>  number<span class="k2">(</span><span class="k1">int</span> value<span class="k2">)</span>
<span class="number"> 13</span>  <span class="k2">{</span>
<span class="number"> 14</span>    this-&gt;value <span class="k3">=</span> value<span class="k2">;</span>
<span class="number"> 15</span>  <span class="k2">}</span>
<span class="number"> 16</span>  number<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <span class="k1">void</span> <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  <span class="k1">void</span> print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 20</span>number<span class="k3">&amp;</span> number::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 21</span><span class="k2">{</span>
<span class="number"> 22</span>  value<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k2">}</span>
<span class="number"> 24</span><span class="k1">void</span> number::operator<span class="k3">+</span><span class="k3">+</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>
<span class="number"> 25</span><span class="k2">{</span>
<span class="number"> 26</span>  <span class="k3">+</span><span class="k3">+</span>value<span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span>
<span class="number"> 28</span><span class="k1">void</span> number::print<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 29</span><span class="k2">{</span>
<span class="number"> 30</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span>value<span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 31</span><span class="k2">}</span>
<span class="number"> 32</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 33</span><span class="k2">{</span>
<span class="number"> 34</span>  number eight<span class="k2">(</span><span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>  eight<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 36</span>  eight.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>  <span class="k3">+</span><span class="k3">+</span>eight<span class="k2">;</span>
<span class="number"> 38</span>  eight.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>
<span class="number"> 40</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 41</span><span class="k2">}</span>
</div></div><p>

overloadplusminus.cpp|23|warning: no return statement in function returning non-void|</p><p>How come only one of the overloaded operators for ++ tell me that there is no return statement. I know that one is postfix and the other is prefix but why is there that preference. I actually don&#39;t need to return anything. I&#39;m trying to make an iterator with this.</p><p><a href="http://www.parashift.com/c++-faq-lite/operator-overloading.html#faq-13.14"> Heres a link to parashit</a></p><p><b>EDIT::NM</b> I just realized there is a type number in front of the declaration for the function thats supposed to return a type number and the other one is type void.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Wed, 28 Dec 2011 13:26:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Heres a link to para<span class="cuss"><span>shit</span></span> [www.parashift.com]</p></div></div><p><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Wed, 28 Dec 2011 13:52:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>operator++() is prefix and operator++(int) is postfix.</p><p>The ++ operation should return the object itself.</p><p>Your code works fine with no errors or warnings. I test it with both clang++ and g++.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (flowbsd)</author>
		<pubDate>Wed, 28 Dec 2011 18:18:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>number<span class="k3">&amp;</span> number::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
  value<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

This doesn&#39;t return anything.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Wed, 28 Dec 2011 22:41:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>postfix should return a copy of *this before it is incremented. Otherwise you just used prefix.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 29 Dec 2011 02:17:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This looks like an issue of learning a C++ subtlety that&#39;s rarely used (operator overloading), while the basics of the language are still not clear.</p><p>i++ evaluates to &quot;the value of i before incrementation&quot;<br />++i evaluates to &quot;the value of i after incrementation&quot;<br />i=5 evaluates as five.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Thu, 29 Dec 2011 04:47:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941817#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>postfix should return a copy of *this before it is incremented. Otherwise you just used prefix.
</p></div></div><p>

Actually no try this one.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">class</span> number
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>  private:
<span class="number">  7</span>
<span class="number">  8</span>    <span class="k1">int</span> value<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>  public:
<span class="number"> 11</span>
<span class="number"> 12</span>  number<span class="k2">(</span><span class="k1">int</span> value<span class="k2">)</span>
<span class="number"> 13</span>  <span class="k2">{</span>
<span class="number"> 14</span>    this-&gt;value <span class="k3">=</span> value<span class="k2">;</span>
<span class="number"> 15</span>  <span class="k2">}</span>
<span class="number"> 16</span>  <span class="k1">void</span> <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <span class="k1">void</span> <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  <span class="k1">void</span> operator--<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  <span class="k1">void</span> operator--<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k1">void</span> print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k1">void</span> number::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span><span class="c">//prefix</span>
<span class="number"> 23</span><span class="k2">{</span>
<span class="number"> 24</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"1"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 25</span>  value<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 26</span><span class="k2">}</span>
<span class="number"> 27</span><span class="k1">void</span> number::operator<span class="k3">+</span><span class="k3">+</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="c">//postfix</span>
<span class="number"> 28</span><span class="k2">{</span>
<span class="number"> 29</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"2"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 30</span>  <span class="k3">+</span><span class="k3">+</span>value<span class="k2">;</span>
<span class="number"> 31</span><span class="k2">}</span>
<span class="number"> 32</span><span class="k1">void</span> number::operator--<span class="k2">(</span><span class="k2">)</span><span class="c">//prefix</span>
<span class="number"> 33</span><span class="k2">{</span>
<span class="number"> 34</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"3"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 35</span>  value--<span class="k2">;</span>
<span class="number"> 36</span><span class="k2">}</span>
<span class="number"> 37</span><span class="k1">void</span> number::operator-- <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="c">//postfix</span>
<span class="number"> 38</span><span class="k2">{</span>
<span class="number"> 39</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"4"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 40</span>  <span class="k3">-</span><span class="k3">-</span>value<span class="k2">;</span>
<span class="number"> 41</span><span class="k2">}</span>
<span class="number"> 42</span><span class="k1">void</span> number::print<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 43</span><span class="k2">{</span>
<span class="number"> 44</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span>value<span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 45</span><span class="k2">}</span>
<span class="number"> 46</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 47</span><span class="k2">{</span>
<span class="number"> 48</span>  number eight<span class="k2">(</span><span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span>  eight<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 50</span>  eight.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>  <span class="k3">+</span><span class="k3">+</span>eight<span class="k2">;</span>
<span class="number"> 52</span>  eight.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>  eight--<span class="k2">;</span>
<span class="number"> 54</span>  eight.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>  <span class="k3">-</span><span class="k3">-</span>eight<span class="k2">;</span>
<span class="number"> 56</span>  eight.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>
<span class="number"> 58</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 59</span><span class="k2">}</span>
</div></div><p>

</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941827#target">Audric</a> said:</div><div class="quote"><p>This looks like an issue of learning a C++ subtlety that&#39;s rarely used (operator overloading), while the basics of the language are still not clear.</p></div></div><p>

Its meant to be used for iterating a list.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Thu, 29 Dec 2011 12:12:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941848#target">verthex</a> said:</div><div class="quote"><p>Its meant to be used for iterating a list.</p></div></div><p>
Even if you only use it in a for(;;num++) loop, there&#39;s very little difficulty in letting it evaluate as the right value for a ++ operator.<br />ie. You should make this compile and run with the expected results:
</p><div class="source-code snippet"><div class="inner"><pre>number eight<span class="k2">(</span><span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
height.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 8</span>
<span class="k2">(</span>eight<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 8</span>
<span class="k2">(</span><span class="k3">+</span><span class="k3">+</span>eight<span class="k2">)</span>.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 10</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Thu, 29 Dec 2011 15:10:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941851#target">Audric</a> said:</div><div class="quote"><p>Even if you only use it in a for(;;num++) loop, there&#39;s very little difficulty in letting it evaluate as the right value for a ++ operator.<br />ie. You should make this compile and run with the expected results:
</p></div></div><p>

I&#39;m not sure what you&#39;re saying, is the code correct or do I need to fix something?</p><p><b>EDIT::</b> I tried to compile the code but it wont compile </p><div class="source-code snippet"><div class="inner"><pre><span class="k2">(</span>eight<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 8</span>
</pre></div></div><p>


I&#39;m not sure how to overload parenthesis.</p><p>I&#39;m also not sure how this would work in this case:</p><div class="source-code snippet"><div class="inner"><pre><span class="k2">(</span>eight<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 8</span>
</pre></div></div><p>

In case eight is pointer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Thu, 29 Dec 2011 20:55:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your ++ operators should <span class="source-code"><span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span></span><br />That should solve it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Thu, 29 Dec 2011 21:29:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For all numeric types, foo++ and ++foo HAVE a value. If you overload these operators without returning anything...it&#39;s misleading. Your overloads are limited, they can be used only if the calling code discards the value.</p><p>People expect that any piece of code written like:
</p><div class="source-code snippet"><div class="inner"><pre>number eight<span class="k2">(</span><span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="k3">+</span><span class="k3">+</span>eight<span class="k2">;</span>
eight.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// prints 9</span>
</pre></div></div><p>
is 100% identical to:
</p><div class="source-code snippet"><div class="inner"><pre>number eight<span class="k2">(</span><span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">(</span><span class="k3">+</span><span class="k3">+</span>eight<span class="k2">)</span>.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// prints 9</span>
</pre></div></div><p>

With your class, the second form cannot be used at all (it just doesn&#39;t compile) because your overloads don&#39;t return a number.<br />(edit for clarity ) If you make your two overloads return a &#39;number&#39; they will work both when the value is used, and when it&#39;s discarded.</p><p>I found an example at the bottom of the following page: <a href="http://www.cs.bu.edu/teaching/cpp/overload/incr-op.html">http://www.cs.bu.edu/teaching/cpp/overload/incr-op.html</a></p><div class="source-code snippet"><div class="inner"><pre>Clock Clock::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span> <span class="c">// prefix form</span>
<span class="k2">{</span>
  tick<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="k2">}</span>

Clock::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="c">// postfix form</span>
<span class="k2">{</span>
  Clock c <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span> <span class="c">// Makes a backup of the current instance</span>
  tick<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k1">return</span> c<span class="k2">;</span> <span class="c">// returns the value of the backup</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Thu, 29 Dec 2011 23:01:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941848#target">verthex</a> said:</div><div class="quote"><p>
Actually no try this one.
</p></div></div><p>
Actually, no try this with your code :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> number <span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="c">/*.......*/</span>
<span class="number">  4</span>
<span class="number">  5</span>   <span class="k1">friend</span> ostream<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="k2">(</span>ostream<span class="k3">&amp;</span> os , <span class="k1">const</span> number<span class="k3">&amp;</span> n<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>ostream<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="k2">(</span>ostream<span class="k3">&amp;</span> os , <span class="k1">const</span> number<span class="k3">&amp;</span> n<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  9</span>   os <span class="k3">&lt;</span><span class="k3">&lt;</span> n.value<span class="k2">;</span>
<span class="number"> 10</span>   <span class="k1">return</span> os<span class="k2">;</span>
<span class="number"> 11</span><span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span>number n<span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>cout <span class="k3">&lt;</span><span class="k3">&lt;</span> n <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 16</span>cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="k3">+</span><span class="k3">+</span>n <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 17</span>cout <span class="k3">&lt;</span><span class="k3">&lt;</span> n<span class="k3">+</span><span class="k3">+</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 30 Dec 2011 03:57:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Alright guys, tell me whats wrong with this one.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">class</span> number
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>  private:
<span class="number">  7</span>
<span class="number">  8</span>    <span class="k1">int</span> value<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>  public:
<span class="number"> 11</span>
<span class="number"> 12</span>  number<span class="k2">(</span><span class="k1">int</span> value<span class="k2">)</span>
<span class="number"> 13</span>  <span class="k2">{</span>
<span class="number"> 14</span>    this-&gt;value <span class="k3">=</span> value<span class="k2">;</span>
<span class="number"> 15</span>    std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span>value<span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 16</span>  <span class="k2">}</span>
<span class="number"> 17</span>  number <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  number <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  <span class="k1">void</span> operator--<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k1">void</span> operator--<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>  <span class="k1">void</span> print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 23</span>number number::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span><span class="c">//prefix</span>
<span class="number"> 24</span><span class="k2">{</span>
<span class="number"> 25</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"1"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 26</span>  value<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 27</span>  <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 28</span><span class="k2">}</span>
<span class="number"> 29</span>number number::operator<span class="k3">+</span><span class="k3">+</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="c">//postfix</span>
<span class="number"> 30</span><span class="k2">{</span>
<span class="number"> 31</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"2"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 32</span>  <span class="k3">+</span><span class="k3">+</span>value<span class="k2">;</span>
<span class="number"> 33</span>  <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 34</span><span class="k2">}</span>
<span class="number"> 35</span><span class="k1">void</span> number::operator--<span class="k2">(</span><span class="k2">)</span><span class="c">//prefix</span>
<span class="number"> 36</span><span class="k2">{</span>
<span class="number"> 37</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"3"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 38</span>  value--<span class="k2">;</span>
<span class="number"> 39</span><span class="k2">}</span>
<span class="number"> 40</span><span class="k1">void</span> number::operator-- <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="c">//postfix</span>
<span class="number"> 41</span><span class="k2">{</span>
<span class="number"> 42</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"4"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 43</span>  <span class="k3">-</span><span class="k3">-</span>value<span class="k2">;</span>
<span class="number"> 44</span><span class="k2">}</span>
<span class="number"> 45</span><span class="k1">void</span> number::print<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 46</span><span class="k2">{</span>
<span class="number"> 47</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span>value<span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 48</span><span class="k2">}</span>
<span class="number"> 49</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 50</span><span class="k2">{</span>
<span class="number"> 51</span>  <span class="c">/*</span>
<span class="number"> 52</span><span class="c">  number eight(8);</span>
<span class="number"> 53</span><span class="c">  eight++;</span>
<span class="number"> 54</span><span class="c">  eight.print();</span>
<span class="number"> 55</span><span class="c">  ++eight;</span>
<span class="number"> 56</span><span class="c">  eight.print();</span>
<span class="number"> 57</span><span class="c">  eight--;</span>
<span class="number"> 58</span><span class="c">  eight.print();</span>
<span class="number"> 59</span><span class="c">  --eight;</span>
<span class="number"> 60</span><span class="c">  eight.print();</span>
<span class="number"> 61</span><span class="c">  */</span>
<span class="number"> 62</span>  number eight<span class="k2">(</span><span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 63</span>
<span class="number"> 64</span>  eight.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 8</span>
<span class="number"> 65</span>  <span class="k2">(</span>eight<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 8</span>
<span class="number"> 66</span>  <span class="k2">(</span><span class="k3">+</span><span class="k3">+</span>eight<span class="k2">)</span>.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 10</span>
<span class="number"> 67</span>
<span class="number"> 68</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 69</span><span class="k2">}</span>
</div></div><p>

So when I use: 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
</pre></div></div><p>
that returns an instance, object, pointer to what exactly?<br />The address of the number class in memory, am I correct?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Fri, 30 Dec 2011 13:23:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code"><span class="k1">this</span></span> is a pointer. <span class="source-code"><span class="k3">*</span><span class="k1">this</span></span> is the object itself.</p><p>You didn&#39;t make those methods return a reference, you just made them return a copy of the object, which isn&#39;t that useful. There is a slight difference in the method prototypes they gave, and the ones you pasted.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941800#target">verthex</a> said:</div><div class="quote"><div class="source-code snippet"><div class="inner"><pre>number<span class="k3">&amp;</span> number::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
  value<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
This doesn&#39;t return anything.</p></div></div><p>Probably because you didn&#39;t <span class="source-code"><span class="k1">return</span></span> anything.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 30 Dec 2011 14:31:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941927#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p>There is a slight difference in the method prototypes they gave, and the ones you pasted.</p></div></div><p>

But this is the same thing I&#39;m doing.</p><p>Their code.
</p><div class="source-code snippet"><div class="inner"><pre>Number ans <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
   <span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k3">*</span><span class="k1">this</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">// or just call operator++()</span>
   <span class="k1">return</span> ans<span class="k2">;</span>
</pre></div></div><p>

my code.
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">class</span> number
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>  private:
<span class="number">  7</span>
<span class="number">  8</span>    <span class="k1">int</span> value<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>  public:
<span class="number"> 11</span>
<span class="number"> 12</span>  number<span class="k2">(</span><span class="k1">int</span> value<span class="k2">)</span>
<span class="number"> 13</span>  <span class="k2">{</span>
<span class="number"> 14</span>    this-&gt;value <span class="k3">=</span> value<span class="k2">;</span>
<span class="number"> 15</span>    std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span>value<span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 16</span>  <span class="k2">}</span>
<span class="number"> 17</span>  number <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  number <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  <span class="k1">void</span> operator--<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k1">void</span> operator--<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>  <span class="k1">void</span> print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 23</span>number number::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span><span class="c">//prefix</span>
<span class="number"> 24</span><span class="k2">{</span>
<span class="number"> 25</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"1"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 26</span>  value<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>  number ans <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 29</span>  <span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">(</span><span class="k1">this</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>value<span class="k2">)</span><span class="k2">;</span>  <span class="c">// or just call operator++()</span>
<span class="number"> 30</span>  <span class="k1">return</span> ans<span class="k2">;</span>
<span class="number"> 31</span><span class="k2">}</span>
<span class="number"> 32</span>number number::operator<span class="k3">+</span><span class="k3">+</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="c">//postfix</span>
<span class="number"> 33</span><span class="k2">{</span>
<span class="number"> 34</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"2"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 35</span>  <span class="k3">+</span><span class="k3">+</span>value<span class="k2">;</span>
<span class="number"> 36</span>  <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 37</span><span class="k2">}</span>
<span class="number"> 38</span><span class="k1">void</span> number::operator--<span class="k2">(</span><span class="k2">)</span><span class="c">//prefix</span>
<span class="number"> 39</span><span class="k2">{</span>
<span class="number"> 40</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"3"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 41</span>  value--<span class="k2">;</span>
<span class="number"> 42</span><span class="k2">}</span>
<span class="number"> 43</span><span class="k1">void</span> number::operator-- <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="c">//postfix</span>
<span class="number"> 44</span><span class="k2">{</span>
<span class="number"> 45</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"4"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 46</span>  <span class="k3">-</span><span class="k3">-</span>value<span class="k2">;</span>
<span class="number"> 47</span><span class="k2">}</span>
<span class="number"> 48</span><span class="k1">void</span> number::print<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 49</span><span class="k2">{</span>
<span class="number"> 50</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span>value<span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="number"> 51</span><span class="k2">}</span>
<span class="number"> 52</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 53</span><span class="k2">{</span>
<span class="number"> 54</span>  <span class="c">/*</span>
<span class="number"> 55</span><span class="c">  number eight(8);</span>
<span class="number"> 56</span><span class="c">  eight++;</span>
<span class="number"> 57</span><span class="c">  eight.print();</span>
<span class="number"> 58</span><span class="c">  ++eight;</span>
<span class="number"> 59</span><span class="c">  eight.print();</span>
<span class="number"> 60</span><span class="c">  eight--;</span>
<span class="number"> 61</span><span class="c">  eight.print();</span>
<span class="number"> 62</span><span class="c">  --eight;</span>
<span class="number"> 63</span><span class="c">  eight.print();</span>
<span class="number"> 64</span><span class="c">  */</span>
<span class="number"> 65</span>  number eight<span class="k2">(</span><span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>
<span class="number"> 67</span>  eight.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 8</span>
<span class="number"> 68</span>  <span class="k2">(</span>eight<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 8</span>
<span class="number"> 69</span>  <span class="k2">(</span><span class="k3">+</span><span class="k3">+</span>eight<span class="k2">)</span>.print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// expected: 10</span>
<span class="number"> 70</span>
<span class="number"> 71</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 72</span><span class="k2">}</span>
</div></div><p>

Except their example doesn&#39;t specify what exactly they are incrementing. I have a type int called value. I rewrote the first method for the prefix ++ operation.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>You didn&#39;t make those methods return a reference, you just made them return a copy of the object, which isn&#39;t that useful.</p></div></div><p>

Would this work?</p><div class="source-code snippet"><div class="inner"><pre>number<span class="k3">*</span> ans <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="k1">return</span> <span class="k3">*</span>ans<span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Fri, 30 Dec 2011 16:19:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941928#target">verthex</a> said:</div><div class="quote"><p>Would this work?</p></div></div><p>no.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 31 Dec 2011 02:03:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>prefix increment and decrement should both return a number reference to *this.</p><p>postfix increment and decrement should both return a copy of *this made <u>before</u> this-&gt;value is incremented or decremented.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 31 Dec 2011 05:09:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941968#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>number reference to *this.</p></div></div><p>

Can you show some code please.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> copy of *this made before this-&gt;value </p></div></div><p>

Similarly to what I did except I didn&#39;t do it in the correct order?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Sat, 31 Dec 2011 14:10:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/941990#target">verthex</a> said:</div><div class="quote"><p>
Can you show some code please.
</p></div></div><p>

</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> number <span class="k2">{</span>
<span class="number">  2</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  3</span>   <span class="c">/// prefix</span>
<span class="number">  4</span>   number<span class="k3">&amp;</span> operator--<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>   number<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>   <span class="c">/// postfix</span>
<span class="number">  8</span>   number operator--<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>   number <span class="k1">operator</span><span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="c">/// prefix</span>
<span class="number"> 13</span>
<span class="number"> 14</span>number<span class="k3">&amp;</span> number::operator--<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 15</span>   <span class="k3">-</span><span class="k3">-</span>value<span class="k2">;</span>
<span class="number"> 16</span>   <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 17</span><span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span>number<span class="k3">&amp;</span> number::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</span>   <span class="k3">+</span><span class="k3">+</span>value<span class="k2">;</span>
<span class="number"> 21</span>   <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="c">/// postfix</span>
<span class="number"> 25</span>
<span class="number"> 26</span>number number::operator--<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 27</span>   number n <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 28</span>   <span class="k3">-</span><span class="k3">-</span>value<span class="k2">;</span>
<span class="number"> 29</span>   <span class="k1">return</span> n<span class="k2">;</span>
<span class="number"> 30</span><span class="k2">}</span>
<span class="number"> 31</span>
<span class="number"> 32</span>number number::operator<span class="k3">+</span><span class="k3">+</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 33</span>   number n <span class="k3">=</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number"> 34</span>   <span class="k3">+</span><span class="k3">+</span>value<span class="k2">;</span>
<span class="number"> 35</span>   <span class="k1">return</span> n<span class="k2">;</span>
<span class="number"> 36</span><span class="k2">}</span>
</div></div><p>

</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Similarly to what I did except I didn&#39;t do it in the correct order?
</p></div></div><p>
Yes, the problem with yours was that you returned *this after incrementing this-&gt;value. That&#39;s not what postfix is supposed to do - it should give you the same value as the variable itself, and it can only do that if it returns a copy made before the incrementation takes place.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 31 Dec 2011 22:31:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Edgar.</p><p>In the code:</p><div class="source-code snippet"><div class="inner"><pre>number<span class="k3">&amp;</span> number::operator--<span class="k2">(</span><span class="k2">)</span>
</pre></div></div><p>

Is the ampersand used for passing the reference to *this?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Sat, 31 Dec 2011 23:04:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/942033#target">verthex</a> said:</div><div class="quote"><p>
Is the ampersand used for passing the reference to *this?
</p></div></div><p>
Yes.<br />The ampersand literally means and reads &#39;reference&#39;. A reference is used like a variable, but behind the scenes works like a pointer, allowing you to work directly on a variable from the same or a different scope.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> alter_copy<span class="k2">(</span><span class="k1">int</span> a<span class="k2">)</span> <span class="k2">{</span>
   a <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span><span class="c">// duh, only altered a local copy of a</span>
<span class="k2">}</span>

<span class="k1">void</span> alter_reference<span class="k2">(</span><span class="k1">int</span><span class="k3">&amp;</span> a<span class="k2">)</span> <span class="k2">{</span>
   a <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span><span class="c">// Ooh, we actually altered the variable that was passed to us.</span>
<span class="k2">}</span>

<span class="k1">void</span> alter_by_pointer<span class="k2">(</span><span class="k1">int</span><span class="k3">*</span> pa<span class="k2">)</span> <span class="k2">{</span>
   <span class="k3">*</span>pa <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span><span class="c">// we used the address of a int variable to alter its value</span>
           <span class="c">// same as reference alteration above, but we had to dereference</span>
           <span class="c">// the pointer passed to us.</span>
<span class="k2">}</span>
</pre></div></div><p>

So when you return a reference, you are allowing the user to modify the variable you are returning to them, in this case, *this (the data pointed to by this). Fair warning - never return a reference to a stack object, because it goes out of scope and you are using deallocated memory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 31 Dec 2011 23:12:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You really should let him do his own research.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sun, 01 Jan 2012 02:19:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609148/942036#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Yes.<br />The ampersand literally means and reads &#39;reference&#39;. A reference is used like a variable, but behind the scenes works like a pointer, allowing you to work directly on a variable from the same or a different scope.</p></div></div><p>

thanks for your help. Its everything I already knew but I wanted to be sure of.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Sun, 01 Jan 2012 08:59:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><pre class="terminal">(return type) (function name) (function arguments)
{
   (process that includes arguments)
   return (return type);
}</pre><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 01 Jan 2012 09:11:56 +0000</pubDate>
	</item>
</rss>
