importance of returning reference in operator overloading.

This is a discussion on importance of returning reference in operator overloading. within the C++ Programming forums, part of the General Programming Boards category; Originally Posted by vaibhavs17 why compiler did not flash error for your piece of code without &. Which compiler might ...

  1. #16
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    20,981
    Quote Originally Posted by vaibhavs17
    why compiler did not flash error for your piece of code without &.
    Which compiler might that be, and what is the exact code?
    C + C++ Compiler: MinGW port of GCC
    Version Control System: Bazaar

    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  2. #17
    Registered User
    Join Date
    Mar 2009
    Posts
    40
    Quote Originally Posted by vaibhavs17 View Post
    why compiler did not flash error for your piece of code without &.

    Code:
      friend std::ostream operator<<(std::ostream& out, const Integer& i)
        {
            return out << i.n;
        }
    Could you please tell me reason for this?

  3. #18
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    20,981
    Quote Originally Posted by vaibhavs17
    Could you please tell me reason for this?
    Maybe it is a compiler bug where your compiler determined that it did not need to copy, so it ignored the fact that copying was not possible.

    EDIT:
    I tested with:
    • Comeau online compiler
    • g++ 4.2.4
    • MinGW port of g++ 3.4.5
    • MSVC8

    and all of them reported at least one error, unlike your compiler.
    Last edited by laserlight; 05-13-2009 at 01:31 AM.
    C + C++ Compiler: MinGW port of GCC
    Version Control System: Bazaar

    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  4. #19
    Registered User
    Join Date
    Mar 2009
    Posts
    40
    [QUOTE=brewbuck;861946]Yes. It would cause the following code to not work as you might expect:

    Code:
    (a += 1) += 2;
    The expected result would be to add 3 to the value of a. But if operator+=() returns an object instead of a reference, it will actually only add 1 to the value, because the result of the first increment is not the original object but a temporary copy of it -- the 2 gets added to this temporary then silently vanishes.

    How can we achieve the same with below peice of code?
    without returning a reference, output is same with both case

    Code:
    #include <iostream.h>
    class Sample
    {
    	int i;
    public:
    	Sample(){}
    	Sample(int x)
    	{ i = x;
    	}
    
    	Sample operator+(const Sample& s1)
    	{
    		i = i + s1.i;
    		return *this;
    	}
    	void show()
    	{
    		cout<<i<<endl;
    	}
    };
    
    void main()
    {
    	Sample a(5),b(10),c(15);
    //	a.show();
    	//b.show();
    	a =a +b +c ;
    	a.show();
    }

  5. #20
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    20,981
    Quote Originally Posted by vaibhavs17
    How can we achieve the same with below peice of code?
    operator+= and operator+ are supposed to have different semantics (i.e., meaning), so trying to achieve the same strange thing as brewbuck's example does not quite make sense. Consequently, your operator+ is a poor one as it changes the current object.
    C + C++ Compiler: MinGW port of GCC
    Version Control System: Bazaar

    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  6. #21
    Registered User
    Join Date
    Mar 2009
    Posts
    40
    Thanks, i would have to stop thread now. I understood now.

    Thanks for your help.

Page 2 of 2 FirstFirst 12
Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Getting an error with OpenGL: collect2: ld returned 1 exit status
    By Lorgon Jortle in forum C++ Programming
    Replies: 6
    Last Post: 05-08-2009, 08:18 PM
  2. Undefined Reference Compiling Error
    By AlakaAlaki in forum C++ Programming
    Replies: 1
    Last Post: 06-27-2008, 11:45 AM
  3. Screwy Linker Error - VC2005
    By Tonto in forum C++ Programming
    Replies: 5
    Last Post: 06-19-2007, 02:39 PM
  4. C OpenGL Compiler Error?
    By Matt3000 in forum C Programming
    Replies: 12
    Last Post: 07-07-2006, 04:42 PM
  5. c++ linking problem for x11
    By kron in forum Linux Programming
    Replies: 1
    Last Post: 11-19-2004, 09:18 AM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21