Avatar billede steen Nybegynder
07. maj 2004 - 10:49 Der er 1 kommentar og
2 løsninger

Operator Overloading

Er der én der vil forklare mig med et eksempel, hvad begrebet "operator overloading" dækker over? Jeg har nu læst om det i to forskellige bøger uden at fatte det. Eks. gerne i C#

/Steen
Avatar billede fgsupermand Nybegynder
07. maj 2004 - 11:07 #1
Det betyder man kan få "operators" til at gøre "andre" ting end normalt

Hvis man har 2 klasser og gerne vil "ligge dem sammen" så kan det gøres med "operator overloading":

class test {
    int x, y, z;
public:
    test() { x = y = z = 0; }
    test(int i, int j, int k) {x=i; y=j; z=k;}
    test operator+(test obj);
};

test test:operator+(test obj) {
  test temp;

  temp.x = x + obj.x;
  temp.y = y + obj.y;
  temp.z = z + obj.z;

  return temp;
}

nu er det nulig at ligge 2 af disse objekter sammen:
test a(5,3,1), b(3,9,7), c;

c = a + b;

c indeholder nu:
x = 8
y = 12
z = 8

Det er godt nok skrevet i C++, men jeg håber du forstår det
Avatar billede arne_v Ekspert
07. maj 2004 - 13:13 #2
Operator overloading betyder at du kan lade operatorer +-*/ etc. oprerere
på dine klasser for at få en lidt kønnere syntax end ved brug af metode kald.

Man bør kun bruge det hvis operatorens betydning er intuitiv.

C# eksempel:

using System;

public class Vector3D
{
    private int x;
    private int y;
    private int z;
    public Vector3D(int x, int y, int z)
    {
        this.x = x;
        this.y = y;
        this.z = z;
    }
    public override string ToString()
    {
        return ("[" + x + "," + y + "," + z + "]");
    }
    public static Vector3D operator+(Vector3D v1, Vector3D v2) {
        return new Vector3D(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
    }
    public static Vector3D operator-(Vector3D v1, Vector3D v2) {
        return new Vector3D(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z);
    }
}

class MainClass
{
    public static void Main(string[] args)
    {
        Vector3D a = new Vector3D(1, 2, 3);
        Vector3D b = new Vector3D(1, 2, 4);
        Console.WriteLine(a + " + " + b + " = " + (a + b));
        Console.WriteLine(a + " - " + b + " = " + (a - b));
    }
}
Avatar billede arne_v Ekspert
07. maj 2004 - 13:31 #3
Iøvrigt så ligner C# operator overload mere C++ friend operator overload end
C++ member operator overload.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester