Operators overloading in D2
Steven Schveighoffer
schveiguy at yahoo.com
Mon May 17 13:59:05 PDT 2010
On Mon, 17 May 2010 16:38:49 -0400, Larry Luther <larry.luther at dolby.com>
wrote:
> Hi, Dan used the following method for his vector class:
>
> void opOpAssign (string op:"+=")(ref Vector3 other) {...}
>
> Why the "ref"? As I understand it, objects of class vector
> would already be passed as references.
>
> Larry
Yes, ref is redundant in this case. However, you can ref a class
reference, meaning you can change the passed-in class reference.
An example:
class C
{
int x;
}
void foo(ref C xyz)
{
xyz.x = 5
xyz = new C;
xyz.x = 6;
}
void bar(C xyz)
{
xyz.x = 7;
xyz = new C;
xyz.x = 8;
}
void baz()
{
C c = new C;
c.x = 1;
C c2 = c;
foo(c);
// foo changed the x member of the object c and c2 pointed to, and then
// actually changed the object c points to.
assert(c.x == 6 && c2.x == 5 && c !is c2);
c2 = c;
c.x = 1;
bar(c);
// bar changed the x member of the object c and c2 pointed to, and then
// created a local C which did not affect the class reference passed in.
assert(c.x == 7 && c2.x == 7 && c is c2);
}
-Steve
More information about the Digitalmars-d-learn
mailing list