Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > += operation

Reply
Thread Tools

+= operation

 
 
foolsmart2005@gmail.com
Guest
Posts: n/a
 
      06-14-2008
ComplexNum ComplexNum:perator +(const ComplexNum& rhs) const //
- operation is the similar way
{
ComplexNum ans;
ans.real = real + rhs.real;
ans.imaginary = imaginary + rhs.imaginary;
return ans;
}

it works and my lecturer said it is correct but,
for += operation, my code is:
ComplexNum ComplexNum:perator += (const ComplexNum& rhs) const
{
ComplexNum ans;
ans.real += rhs.real;
ans.imaginary += rhs.imaginary;
return ans;
}

here is lecturer's comment:
+= should be different. a += b means a = a + b
therefore *this object (i.e. a) should be updated with the answer.

Do anyone know how to write += operation?
 
Reply With Quote
 
 
 
 
foolsmart2005@gmail.com
Guest
Posts: n/a
 
      06-14-2008
On Jun 15, 12:35 am, Sam <s...@email-scan.com> wrote:
> foolsmart2...@gmail.com writes:
> > for += operation, my code is:
> > ComplexNum ComplexNum:perator += (const ComplexNum& rhs) const
> > {
> > ComplexNum ans;
> > ans.real += rhs.real;
> > ans.imaginary += rhs.imaginary;
> > return ans;
> > }

>
> > here is lecturer's comment:
> > += should be different. a += b means a = a + b

>
> Your lecturer should've also told you that your results are undefined since
> the contents of the ans object are, apparently, not initialized. Your +=
> operation on ans's members are applied to, apparently, uninitialized members
> of this object. This would be the same as writing:
>
> int x;
>
> x += 4;
>
> Obviously, the results of this are undefined.
>
> > therefore *this object (i.e. a) should be updated with the answer.

>
> Correct.
>
> > Do anyone know how to write += operation?

>
> Yes, but why don't you try to figure this out yourself. Look around, there
> are plenty of examples of assignment operators for other classes. Here are
> two free clues:
>
> 1) operator += modifies this object, therefore it cannot be a const
> function (well, it can be, but you're not there, yet).
>
> 2) The assignment operator, be it operator =(), operator +=(), operator
> -=(), or anything else, traditional does not return another instance of the
> object, but rather a reference to this, modified, object.
>
> application_pgp-signature_part
> 1KDownload


Of course I have searched the Internet but, on Google, I type +=
operation, it cannot detect '+='. That's why I find unsuitable ones.
 
Reply With Quote
 
 
 
 
foolsmart2005@gmail.com
Guest
Posts: n/a
 
      06-14-2008
On Jun 15, 12:35 am, Sam <s...@email-scan.com> wrote:
> foolsmart2...@gmail.com writes:
> > for += operation, my code is:
> > ComplexNum ComplexNum:perator += (const ComplexNum& rhs) const
> > {
> > ComplexNum ans;
> > ans.real += rhs.real;
> > ans.imaginary += rhs.imaginary;
> > return ans;
> > }

>
> > here is lecturer's comment:
> > += should be different. a += b means a = a + b

>
> Your lecturer should've also told you that your results are undefined since
> the contents of the ans object are, apparently, not initialized. Your +=
> operation on ans's members are applied to, apparently, uninitialized members
> of this object. This would be the same as writing:
>
> int x;
>
> x += 4;
>
> Obviously, the results of this are undefined.
>
> > therefore *this object (i.e. a) should be updated with the answer.

>
> Correct.
>
> > Do anyone know how to write += operation?

>
> Yes, but why don't you try to figure this out yourself. Look around, there
> are plenty of examples of assignment operators for other classes. Here are
> two free clues:
>
> 1) operator += modifies this object, therefore it cannot be a const
> function (well, it can be, but you're not there, yet).
>
> 2) The assignment operator, be it operator =(), operator +=(), operator
> -=(), or anything else, traditional does not return another instance of the
> object, but rather a reference to this, modified, object.
>
> application_pgp-signature_part
> 1KDownload


is this time correct?
ComplexNum operator += (const ComplexNum& in1, const ComplexNum& in2)
{
ComplexNum ans;
ans.real = in1.real + in2.real;
ans.imaginary = in1.imaginary + in2.imaginary;
return ans;
}

I make it a friend function.
friend ComplexNum operator+=(const ComplexNum& in1, const ComplexNum&
in2);
 
Reply With Quote
 
Frank Birbacher
Guest
Posts: n/a
 
      06-14-2008
Hi!

Sam schrieb:
> This would be the same as writing:
>
> int x;
>
> x += 4;


The class could have a default constructor which initializes the
members, though.

Frank
 
Reply With Quote
 
Frank Birbacher
Guest
Posts: n/a
 
      06-14-2008
Hi!

schrieb:
> Of course I have searched the Internet but, on Google, I type +=
> operation, it cannot detect '+='. That's why I find unsuitable ones.


This should help:
http://www.google.com/search?q=c%2B%...btnG=Suche&lr=

Regards,
Frank
 
Reply With Quote
 
Abhishek Padmanabh
Guest
Posts: n/a
 
      06-14-2008
On Jun 14, 10:08*pm, "foolsmart2...@gmail.com"
<foolsmart2...@gmail.com> wrote:
> On Jun 15, 12:35 am, Sam <s...@email-scan.com> wrote:
> > foolsmart2...@gmail.com writes:
> > > for += operation, my code is:
> > > ComplexNum ComplexNum:perator += (const ComplexNum& rhs) const
> > > {
> > > * * * * * *ComplexNum ans;
> > > * * * * * *ans.real += rhs.real;
> > > * * * * * *ans.imaginary += rhs.imaginary;
> > > * * * * * *return ans;
> > > *}

>
> > > here is lecturer's comment:
> > > += should be different. a += b means a = a + b

>
> > Your lecturer should've also told you that your results are undefined since
> > the contents of the ans object are, apparently, not initialized. Your +=
> > operation on ans's members are applied to, apparently, uninitialized members
> > of this object. This would be the same as writing:

>
> > * *int x;

>
> > * *x += 4;

>
> > Obviously, the results of this are undefined.

>
> > > therefore *this object (i.e. a) should be updated with the answer.

>
> > Correct.

>
> > > Do anyone know how to write += operation?

>
> > Yes, but why don't you try to figure this out yourself. Look around, there
> > are plenty of examples of assignment operators for other classes. Here are
> > two free clues:

>
> > 1) operator += modifies this object, therefore it cannot be a const
> > function (well, it can be, but you're not there, yet).

>
> > 2) The assignment operator, be it operator =(), operator +=(), operator
> > -=(), or anything else, traditional does not return another instance of the
> > object, but rather a reference to this, modified, object.

>
> > *application_pgp-signature_part
> > 1KDownload

>
> is this time correct?
> ComplexNum operator += (const ComplexNum& in1, const ComplexNum& in2)
> {
> * * * * * *ComplexNum ans;
> * * * * * *ans.real = in1.real + in2.real;
> * * * * * *ans.imaginary = in1.imaginary + in2.imaginary;
> * * * * * *return ans;
> *}
>
> I make it a friend function.
> friend ComplexNum operator+=(const ComplexNum& in1, const ComplexNum&
> in2);



No. It is not correct yet. The idea is to have operator+= as a non-
static member function, that's how you get a 'this' argument with it
and hence it would just be needing one argument instead of two.
Whatever you are doing with the local object 'ans' should be done with
the '*this' object.

When you get the operator+= working, as a next step, try to write
operator+ in terms of it (operator+=). So that, at least you have to
maintain the code of just one of those two operators.
 
Reply With Quote
 
Erik Wikström
Guest
Posts: n/a
 
      06-14-2008
On 2008-06-14 18:20, wrote:
> ComplexNum ComplexNum:perator +(const ComplexNum& rhs) const //
> - operation is the similar way
> {
> ComplexNum ans;
> ans.real = real + rhs.real;
> ans.imaginary = imaginary + rhs.imaginary;
> return ans;
> }
>
> it works and my lecturer said it is correct but,
> for += operation, my code is:
> ComplexNum ComplexNum:perator += (const ComplexNum& rhs) const
> {
> ComplexNum ans;
> ans.real += rhs.real;
> ans.imaginary += rhs.imaginary;
> return ans;
> }
>
> here is lecturer's comment:
> += should be different. a += b means a = a + b
> therefore *this object (i.e. a) should be updated with the answer.
>
> Do anyone know how to write += operation?


In the += case you want to add the values in rhs to the values of the
complex number on the left hand side (which will be "this" in the body
of the += operator. The += operator should also return a reference to
the number on the left hand side instead of a new object containing the
value of the operation.

--
Erik Wikström
 
Reply With Quote
 
foolsmart2005@gmail.com
Guest
Posts: n/a
 
      06-15-2008
On Jun 15, 9:57 am, "Daniel T." <danie...@earthlink.net> wrote:
> "foolsmart2...@gmail.com" <foolsmart2...@gmail.com> wrote:
> > ComplexNum ComplexNum:perator +(const ComplexNum& rhs) const //
> > - operation is the similar way
> > {
> > ComplexNum ans;
> > ans.real = real + rhs.real;
> > ans.imaginary = imaginary + rhs.imaginary;
> > return ans;
> > }

>
> > it works and my lecturer said it is correct but,
> > for += operation, my code is:
> > ComplexNum ComplexNum:perator += (const ComplexNum& rhs) const
> > {
> > ComplexNum ans;
> > ans.real += rhs.real;
> > ans.imaginary += rhs.imaginary;
> > return ans;
> > }

>
> > here is lecturer's comment:
> > += should be different. a += b means a = a + b
> > therefore *this object (i.e. a) should be updated with the answer.

>
> > Do anyone know how to write += operation?

>
> class ComplexNum
> {
> public:
> ComplexNum& operator+=( const ComplexNum& rhs )
> {
> // add code here
> return *this;
> }
> // everything else
>
> };
>
> int main() {
> ComplexNum a( 1, 2 );
> ComplexNum b( 3, 5 );
> a += b;
> assert( a.real() == 4 );
> assert( a.imag() == 7 );
> cout << "OK\n";
>
> }
>
> Your mission is to add code where it say "add code here" so that the
> main function will print "OK" instead of asserting.


This time my code is:

ComplexNum& ComplexNum:perator += (const ComplexNum& rhs)
{
if(&rhs != this)
{
real+= rhs.real;
imaginary += rhs.imaginary;
}
return *this;
}

is it correct?
 
Reply With Quote
 
Sze
Guest
Posts: n/a
 
      06-15-2008
> This time my code is:
>
> ComplexNum& ComplexNum:perator += (const ComplexNum& rhs)
> {
> if(&rhs != this)
> {
> real+= rhs.real;
> imaginary += rhs.imaginary;
> }
> return *this;
> }
>
> is it correct?


Why shouldn`t you allow addition to itself?
I think it does make sense to allow it, this is another case as with
the assignment operator.
 
Reply With Quote
 
foolsmart2005@gmail.com
Guest
Posts: n/a
 
      06-15-2008
On Jun 15, 11:05 am, Sze <kamistrik...@googlemail.com> wrote:
> > This time my code is:

>
> > ComplexNum& ComplexNum:perator += (const ComplexNum& rhs)
> > {
> > if(&rhs != this)
> > {
> > real+= rhs.real;
> > imaginary += rhs.imaginary;
> > }
> > return *this;
> > }

>
> > is it correct?

>
> Why shouldn`t you allow addition to itself?
> I think it does make sense to allow it, this is another case as with
> the assignment operator.


Do you mean this:
ComplexNum& ComplexNum:perator += (const ComplexNum& rhs)
{
if(&rhs != this)
{
real= real+rhs.real;
imaginary = imaginary+ rhs.imaginary;
}
return *this;
}

?
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Boolean operation and arithmetic operation Buzz Lightyear C++ 10 08-12-2009 01:27 PM
I/O operation, file operation behaviou raan C++ 2 08-16-2007 07:13 PM
Does bit operation always work more efficiently than math operation? david ullua C Programming 13 03-01-2006 11:02 PM
DWL-G650 operation with (and without) WPA2 Fred Marshall Wireless Networking 6 05-08-2005 02:14 AM
my AMD compaq laptop frooze about 4 minutes of operation =?Utf-8?B?SGFycnkgTGV1bmc=?= Wireless Networking 0 08-17-2004 04:15 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57