+ 1
Please, explain me the algorithm operator-overloading.
for example, witch gave the app: We create two objects called obj1(15) and obj2(25) witch have class Sample. These objects have element int var, witch is filled in with constructor: Sample(int a){var = a}. Now we have obj1.var = 15, obg2.var = 25. Also in class Sample we have: MyClass operator+(MyClass &obj) { MyClass res; res.var = this->var+obj.var; return res; } and in void main: My Class res = obj1+obj2; What is going on after created object res? --(sorry for bad english)--
7 odpowiedzi
0
When you declare a object this way, using the =operator, you are calling the constructor by copy, because you are returning a object of type myClass with the +operator.
That constructor is made by default.
You can make it
myClass(const myClass & obj):var(obj.var)
{std::cout<<"Copy";};
Please tell me if that was you question.
0
@Oscar Albornoz, how compiler know that this->var is our obj1 and obj.var? I mean, where we input this? and if I create one more operator overloading for -, create new object called obj3 and write for example obj1+obj2-obj3, than in +operator: this->var is obj1.var, obj.var is obj2, and in -operator: this->var is (obj1.var + obj2.var), obj.var is obj3. Why this->car is the last result and obj.var is next object after operator?
0
@Oscar Albornoz, "this->var is our obj1 and obj.var is obj2.var?"
0
Ok, let's go to see this
If you declare a method this way
myClass add(const myClass & obj)
{
myClass res;
res.var=this->var+obj.var;
return res;
}
To use this method, we would something like
myClass obj3 = obj1.add(obj2);
Here, who called the method add was obj1, so he is 'this', obj2 is the parameter passed.
Now, with the operator+ method , we could do this
myClass obj3 = obj1+(obj2);
or simply obj3 = obj1+obj2.
In resume, who call to the method is the left object.
Here, obj1+obj2-obj3, by operator precedence, that would
tmp = obj1+(obj2)
tmp-(obj3);
0
@Oscar Albornoz, yes, this is my question. Thanks, but I have one more. I created five objects: obj1(10), obj2(20), obj3(30), obj4(40), obj5(50), and four operator overloading for +, -, * and/.
And then, if I wrote obj5-obj4+obj3*obj2/obj1, there was no output, but if I wrote obj3*obj2/obj1-obj4+obj5, I had correct answer. Why? There is no problem with division, no float value.
0
This code works for me, you can check out and compare with your solution
https://code.sololearn.com/cy7LJ5eS9coE/?ref=app
0
@Oscar Albornoz, repeatedly, this code output nothing, and, repeatedly, correct result. Maybe, sometimes compiler works incorrectly, at least, on my phone.