Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 1 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

Funktioner och programorganisation
Programmeringsteknik Föreläsning 6 Skolan för Datavetenskap och kommunikation.
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Föreläsning 1.
Arv.
Abstract & sealed.
Inkapsling.
Polymorfism.
Metoder.
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Alice in Action with Java
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstruktor Ser till att objektets data är korrekt initierade MinKlass::MinKlass(); MinKlass::MinKlass(int.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Programmering i C# 3. Klasser.
Klasser och objekt Klasser, objekt och instansvariabler
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
4. Arv och dynamisk bindning
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Föreläsning 4. Arv – bakgrund (kap. 9) Hund pälsfärg favoritben smutsa_ned() ät_katt() Katt pälsfärg smutsa_ned() klös_soffa() Kanin pälsfärg slaktvikt.
Programmering i C# 5. Structer.
Programmeringsteknik för Media1 & K1
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Multipelt arv Drawable draw() move() position bitmap Persistent save() restore() storage_file_name.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Arrayer och strängar Arrayer Strängar operatorer typkonvertering.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
Föreläsning 1. Innehåll Introduktion till objektorientering –OOP (objektorienterad programmering) –Objekt, instanser, klasser C++ –OO i C++ –Standardbibliotek.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Sid period2CD5250 OOP med C++ Daniel Flemström MDH/IDT Abstrakta Containertyper Vilka finns fördefinierade? Vad kan dom? #pragma warning(disable:4786)
Objektorienterad programmering
Föreläsning 2. Allmänt STL genererar varningar i Visual C++ –”#pragma warning (disable : 4786)”
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Undantag - eng. Exceptions Viktig del av klassbiblioteksdesign “Hoppa direkt ut med felkod” class.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Abstrakta Containertyper Vilka finns fördefinierade? Vad kan dom?
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
Programmering i C# Laborationer.
7. Delegerare och notifierare
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Programmeringsteknik för K och Media
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Funktionsmall template void myfunc(Type * arr, int n) { // kod; // objekt av typ Type kan deklareras.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstanter float pi; const float pi = ; float *pip = π //Kompileringsfel! const float.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
C++ som ett bättre C Sid 1 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT C++ kurs CD5250, vårterminen 2000 Lärare: Mats Medin,
Iteratorer och generiska algoritmer sid. 1 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Iterator vector ::iterator b = ivec.begin() vector ivec vector.
Objektbaserad programmering sid. 1 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv.
Objektorienterad programmering sid. 1 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Objektorienterad programmering OOP = objektbaserad programmering.
Föreläsning 3. Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner.
TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder.
Detaljer i exception-hantering
Objektorienterad programmering forts
Presentationens avskrift:

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 1 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer 134 += = 3 + 4i fördefinierade datatyper (ej klasser):kompilatorn vet vad operatorerna betyder 1 + 2i2 + 3i += ??? + Klass-objekt som vi designar: kompilatorn har ingen aning

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 2 6/29/2015 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 + = ? += Bil::operator+ List::operator+

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 3 6/29/2015 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 745 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

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 4 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT operator+ Överlagring av operatorer exempel 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 theList += newList = myList + otherList; List myList

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 5 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer forts Det är helt OK att ha olika typer till operatorn: + = List::operator+(Elem &e); + = Elem::operator+(List&l); Naturlig Listan vet vad element är Mindre naturlig Vet element- klassen vad en lista är?

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 6 6/29/2015 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

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 7 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Friends (vänner) Box::omskriv(const Cirkel &); Linje::diagonal(const Box&); cout << mylist; class Cirkel { // etc private: // positionsdata etc. };

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 8 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Friends (vänner) forts class Cirkel { friend class Box; // etc private: // positionsdata etc. }; en friend har access till klassens privata saker class Box { friend void Linje::diagonal(const Box &); // etc. };

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 9 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Friends (vänner) forts friend kan vara en annan klass “vanlig” funktion en medlemsfunktion i en annan klass Vanligaste användningen är operatorer om vänstra operanden inte är “vår klass”

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 10 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT "Användardefinierad typkonvertering" (User-defined conversions) Minklass::operator int() { // Kod som utför konverteringen } typ man konverterar till Kompilatorn kan komma att använda konverteringsfunktionen implicit, dvs utan att man kodat ett anrop. För att förhindra det: explicit operator int() En konstruktor med en enda inparameter är faktiskt också en konverteringsfunktion

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 11 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Sammanfattning av olika slags medlemsfunktioner konstruktor* destruktor copy-konstruktor copy assignment operator andra operatorer konverteringsfunktioner (till annan typ än MinKlass) “vanliga” medlemsfunktioner MinKlass ~MinKlass MinKlass(const MinKlass&) MinKlass & operator= operator+ operator int() doSomething(xxx) *konstruktor med en parameter är också konverteringsfunktion

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 12 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Funktionsmall template void myfunc(Type * arr, int n) { // kod; // objekt av typ Type kan deklareras och // användas inom funktionen } Implicit instansiering, Type byts mot aktuell typ

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 13 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Klassmall template class Stack { Stack(); ~Stack(); void push(const Type item); void pop(Type &item); } instansiering görs explicit enligt: Stack my_stack; Type byts mot aktuell typ

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 14 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Klassmall forts Medlemsfunktioner definierade i.cpp-filen måste också göras som mallar: template Stack ::push const Type item) // OBS! { // kod } Type byts mot aktuell typ

Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 15 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Abstrakta Containertyper Vilka finns och vad kan dom? Principer för att bygga en sån? Detta strykes om det ej hinns med!