60 likes | 222 Views
2.78. 5.92. 3.14. +. =. 1. 3. 4. +. =. 1 + 2i. 2 + 3i. +. = ???. +. = ???. Överlagring av operatorer. fördefinierade datatyper (ej klasser):kompilatorn vet vad operatorerna betyder. Klass-objekt som vi designar: kompilatorn har ingen aning. 3 + 4i. ?. =. +. =. +.
E N D
2.78 5.92 3.14 + = 1 3 4 + = 1 + 2i 2 + 3i + = ??? + = ??? Överlagring av operatorer fördefinierade datatyper (ej klasser):kompilatorn vet vad operatorerna betyder Klass-objekt som vi designar: kompilatorn har ingen aning 3 + 4i CD5250 OOP med C++ Mats Medin MDH/IDT
? = + = + Överlagring av operatorer forts För klasser vi tillverkar bestämmer vi • vilka operatorer som ska tillåtas och • vad de betyder De bör betyda något som användaren lätt förstår List::operator+ Bil::operator+ CD5250 OOP med C++ Mats Medin MDH/IDT
Överlagring av operatorer forts Det är språkets fördefinierade operatorer vi kan överlagra • inte riktigt alla men nästan, se boken s 306 • Vi kan inte ändra deras precedensordning • Vi kan inte ändra antalet operander de tar Vi kan inte heller definiera nya operatorer för de fördefinierade datatyperna i språket CD5250 OOP med C++ Mats Medin MDH/IDT
+ = Överlagring av operatorer exempel List myList theList operator+ List::operator+(const List &andraListan) { List sjalv_kopia, kompis_kopia, resultat; sjalv _kopia = kopiera (theList); //privat hjälprutin kompis_kopia = kopiera(andraListan.theList); resultat = konkatenera(sjalv _kopia, kompis_kopia); return resultatet; } • tabell överlagringsbara operatorer i boken s 745 • Det är faktiskt skiftoperatorer man skriver ut resp läser in med newList = myList + otherList; CD5250 OOP med C++ Mats Medin MDH/IDT
= + = + Överlagring av operatorer forts Det är helt OK att ha olika typer till operatorn: • Naturlig • Listan vet vad element är List::operator+(Elem &e); • Mindre naturlig • Vet element-klassen vad en lista är? Elem::operator+(List&l); CD5250 OOP med C++ Mats Medin MDH/IDT
Kom ihåg: Objektet självt (*this) är den vänstra operanden mittObj + annatObj undantag: unära operatorer -mittObj CD5250 OOP med C++ Mats Medin MDH/IDT