Initiering och tilldelning
|
|
- Britta Håkansson
- för 8 år sedan
- Visningar:
Transkript
1 Initiering och tilldelning Initiering och tilldelning Datatyper Inbyggda datatyper Abstrakta datatyper Konkreta datatyper Motiv för en mall för klassdefinitioner Exempel: "En (o)säker array" Konstruktor Destruktor int& IntArr::operator [](int index) Använda IntArr Tilldelning mellan IntArr-objekt Använd konstruktor och destruktor för avlusning Problem: Defaulttilldelning... Problem! (A) Tilldelning/initiering innebär kopiering Egendefinierad tilldelningsoperator Definition av tilldelningsoperatorn Initiering Defaultinitiering... Copy-konstruktor Definition av Copy-konstruktorn Konstruktor och funktionsanrop Medlemsfunktioner för konstanta objekt Slutsats STANDARDMALL När skall standardmallen användas? (B) Tilldelning/initiering innebär delning Referensräknare:exempel Bodyklass Handleklass Övningar
2 Övning 1 Övning 2 Övning 3 Övning 4
3 Datatyper I C++ kan man göra en grov uppdelning av de datatyper som vi använder: - Inbyggda datatyper - Abstrakta datatyper - Konkreta datatyper Inbyggda datatyper T.ex. int, float, long och double. Förutom vissa implementationsberoende egenskaper finns för dessa ett väldefinierat regelsystem som gäller oberoende av vilken kompilator och vilket operativsystem vi använder. Exempel på detta är t.ex. hur de fungerar ihop med olika operatorer, hur de skall överföras till och från funktioner och vilka tilldelningar och typomvandlingar som är möjliga. Man kan t.ex. betrakta de inbyggda typerna som en abstraktion som stödjer den logik och de matematiska begrepp som ofta förekommer när vi skall konstruera program. Abstrakta datatyper När vi studerar en problemdomän strävar vi efter att identifiera objekt som liknar varandra i något avseende. Vi identifierar sedan de egenskaper hos objekten som har betydelse enligt vår problemdefinition. Genom att vi kan utelämna sådana attribut och operationer som inte är relevanta kan man säga att vi gör en förenkling av verkligheten. Med C++ har vi möjlighet att göra en implementation som motsvarar vår analys och till att börja med definiera en klass. Eftersom klassen är en förenklad motsvarighet till något begrepp i verkligheten kan vi betrakta klassen som en abstraktion och använda begreppet "Abstrakt Datatyp". Vi sammanför attribut och definierar sedan vilka operationer som skall vara möjliga. Dessa definerar klassens gränssnitt och vi skilja detta från implementationen. Gränssnittet blir då en specifikation för en "Abstract Data Type" (ADT). En egendefinerad abstrakt datatyp (dvs klass) ger vi i första hand egenskaper som gör att den är en bra abstraktion. När vi använder en abstrakt datatyp är det bara typens gränssnitt som har någon betydelse. Hur implementationen är gjord får inte påverka sättet vi använder den på. Det är inte nödvändigt eller självklart att vi bryr oss om att ge klassen ett gränssnitt som gör att objekten går att använda på samma sätt och i samma sammanhang som de inbyggda datatyperna.
4 Konkreta datatyper Ibland finns behov av att ge en datatyp samma eller liknande egenskaper som en inbyggd datatyp. Man vill kanske kunna använda operatorer på ett liknande sätt som med de inbyggda datatyperna och man vill kunna göra deklarationer, funktionsanrop och tilldelningar på samma sätt som med de inbyggda datatyperna. En klass som får ett gränssnitt som gör att objekten av denna typ får samma egenskaper som de inbyggda datatyperna kallas en "Konkret Datatyp". Motiv för en mall för klassdefinitioner Klassdefinitioner bör innehålla några grundläggande medlemmar. Vi skall nu motivera dessa genom att visa på vad det kan få för konsekvenser att utelämna dem. Exempel: "En (o)säker array" Antag att vi har behov av att införa runtimekontroll av indexering i fält. Något som normalt saknas i C++. Vi definierar därför klassen "IntArr" och omdefinierar indexoperatorn för denna typ. class IntArr public: IntArr(int); ~IntArr(); int& operator[](int); private: int *arr; int limit; ; Konstruktor Vi ger klassen en konstruktor som anropas med ett heltalsargument och som dynamiskt allokerar ett heltalsfält på heapen. IntArr::IntArr(int lim) : arr(new int[lim]),limit(lim)
5 Destruktor Vi ger också klassen en destruktor som ser till att heltalsfältet deallokeras när vi använder delete på en pekare till ett objekt eller när ett temporärt objekt skall deallokeras. IntArr::~IntArr() delete [] arr; int& IntArr::operator [](int index) Sedan definierar vi en [ ] -operator för klassen IntArr ( Varför måste funktionen vara av typen "int&"?) int& IntArr::operator [](int index) if (index < 0 index >= limit) cerr <<"\"IntArr::operator[](int)\"Otillåtet index! (" <<index << ")\n"; exit(1); return arr[index]; Använda IntArr main() // Definiera ett arrayobjekt... IntArr array1(10); // Tilldela värden till elementen... for(int i=0;i<10;i++) array1[i]=i*i; // Skriv ut en tabell cout << setw(5) << "i" << setw(12) << "array1[i]" << endl; for(i=0;i<10;i++) cout << setw(5) << i << setw(12) << array1[i] << endl;
6 return 0;
7 Tilldelning mellan IntArr-objekt Vad händer om vi använder flera IntArr och börjar göra tilldelningar? main() // Definiera ett arrayobjekt... IntArr array1(10); // Definiera ännu ett arrayobjekt... IntArr array2(10); // Tilldela värden till elementen... for(int i=0;i<10;i++) array1[i]=i*i; // Skriv ut en tabell cout << setw(5) << "i"; cout << setw(12) << "array1[i]" << endl; for(i=0;i<10;i++) cout << setw(5) << i << setw(12)<< array1[i] << endl; // Låt det andra vara lika med det första... array2 = array1; //Manipulera med elementen i den andra arrayen... for(i=0;i<10;i++) array2[i] = array2[i] * i;
8 // Skriv ut rubriker... cout << setw(5) << "i" << setw(12) << "array1[i]" << setw(12) << "array2[i]" << endl; // Skriv ut en tabell... for(i=0;i<10;i++) cout << setw(5) << i << setw(12) << array1[i] << setw(12) << array2[i] << endl; return 0; När vi manipulerar med array1 påverkas array2. Varför? Använd konstruktor och destruktor för avlusning Vi låter konstruktor och destruktor rapportera vad som händer...
9 IntArr::IntArr(int lim) : arr(new int[lim]),limit(lim) cout << "Allokerar plats för " << limit << " int med startadress " << arr << endl; IntArr::~IntArr() cout << "Frigör plats för " << limit << " int med startadress " << arr << endl; delete [] arr; Problem: - Vi använder "delete" på samma adress två gånger. Detta får oönskade konsekvenser. - Vi manipulerar med array1 när vi ändrar i array2! - Vi tappar bort det minne som array1 allokerade Defaulttilldelning... Vid tilldelning sker medlemsvis kopiering. Pekaren kopieras men inte det minne som den pekar på:
10 array1 array2 arr arr array2 = array1; array1 arr array2 arr tappat minne
11 Problem! Vi måste bestämma oss för om vi vill: (A) en tilldelning betyder att vi utför en kopiering av det som refereras : A array1 array2 arr arr (B) en tilldelning skall betyda att två objekt får en referens till samma minne (en resurs). array1 arr B array2 arr (A) Tilldelning/initiering innebär kopiering Vi väljer först att visa hur man implementerar kopiering av objekt som refererar till en resurs (oftast minne). Vi skall alltså bl.a. undvika att: vi använder "delete" på samma adress två gånger samt de oönskade konsekvenser som detta får. manipulation av ett objekt (array1) innebär att vi även manipulerar med ett annat (array2). Vi tappar bort det minne som ett objekt allokerar (array1). (Vi skall senare visa hur man implementerar resursdelning.) Egendefinierad tilldelningsoperator
12 Vi löser problemet med hjälp av en egendefinierad tilldelningsoperator. Tilldelningsoperatorn kan bara överlagras som en medlemsfunktion. Den ärvs inte. class IntArr public: IntArr(int); ~IntArr(); int& operator[](int); IntArr& operator=(const IntArr&); private: int *arr; int limit; ; Definition av tilldelningsoperatorn Vi låter tilldelning betyda att kopian får samma dimension som originalet. Sedan kopierar vi element för element... IntArr& IntArr::operator=(IntArr& ia) if (this!= &ia) // vitalt skydd mot självtilldelning!! cout << "Frigör plats för " << limit << " int med startadress " << arr << endl; delete [] arr; // Frigör det egna fältet... limit = ia.limit; // Använd det andra objektets // dimension arr = new int[limit]; // Allokera nytt // minne... for(int i=0;i<limit;i++) // Kopiera in elementen (*this)[i]= ia[i]; cout << "Allokerar plats för " << limit << " int med startadress " << arr << endl; return *this; Nu har vi löst problemet med tilldelning... // Returnera mig själv...
13 Initiering Antag att vi vill kunna initiera ett nytt objekt med ett annat objekt. Detta vore praktiskt och vi är vana vid att kunna göra detta med andra typer. Man skulle kunna anta att detta går bra eftersom vi har infört en tilldelningsoperator. main() // Definiera ett arrayobjekt... IntArr array1(10); // Tilldela v rden till elementen... for(int i=0;i<10;i++) array1[i]=i*i; cout.fill(' '); // Skriv ut en tabell cout << setw(5) << "i"; cout << setw(12) << "array1[i]" << endl; for(i=0;i<5;i++) cout << setw(5) << i << setw(12) << array1[i] << endl; // Definiera ännu ett arrayobjekt och // initiera detta med det första.. IntArr array2 = array1;
14 // Manipulera med elementen i den andra arrayen... for(i=0;i<10;i++) array2[i] = array2[i] * i; cout.fill(' '); // Skriv ut rubriker... cout << setw(5) << "i" << setw(12) << "array1[i]" << setw(12) << "array2[i]" << endl; // Skriv ut en tabell... for(i=0;i<5;i++) cout << setw(5) << i << setw(12) << array1[i] << setw(12) << array2[i] << endl; return 0; Det visar sig dock att vi får samma problem som förut dvs att pekarens värde kopieras. Slutsats: tilldelningsoperatorn används inte vid initiering. Defaultinitiering...
15 Vid initiering sker medlemsvis kopiering.vi allokerar inte något eget minne för "arr" i array2 och vi kommer att använda delete två gånger på samma adress (i destruktorn). array1 arr IntArr array2 = array1; array1 arr array2 arr Copy-konstruktor Vid initieringar genererar kompilatorn en default konstruktor som utför medlemsvis kopiering. Som tur är kan vi definiera en egen "Copy-konstruktor" som gör allt på rätt sätt. Lägg märke till hur den är deklarerad: class IntArr public: IntArr(int); // IntArr(const IntArr& ia);//"copy"-konstruktor ~IntArr(); int& operator[](int); IntArr& operator=(const IntArr&); private: int *arr; int limit; ; Definition av Copy-konstruktorn I definitionen av klassens Copy-konstruktor använder vi samma dimension som orginalet men allokerar ett nytt heltalsfält. Sedan kopierar vi in elementen med hjälp av tilldelningsoperatorn: IntArr::IntArr(const IntArr& ia) : arr(new int[ia.limit]),limit(ia.limit) // Allokera och initiera... cout << "Allokerar plats för " << limit << " int med startadress " << arr << endl; for(int i=0;i<limit;i++) // Kopiera in elementen
16 (*this)[i]= ia[i]; // ett och ett... När vi prövar vårt program visar det sig att vi har löst problemet. Initiering innebär nu kopiering! Konstruktor och funktionsanrop Antag att vi skriver en funktion som skriver ut värden från en "IntArr". Vad har det för betydelse om vi definierar den som funk1 (värdeanrop) eller funk2 (referensanrop) nedan och vad krävs för att vi skall kunna använda ett konstant objekt av typ IntArr på det sätt som visas nedan? void funk1(const IntArr array, int n) cout.fill(' '); // Skriv ut en tabell cout << setw(5) << "i" << setw(12) << "array1[i]" << endl; for(int i=0;i<n;i++) cout << setw(5) << i << setw(12) << array[i] << endl; void funk2(const IntArr& array, int n) cout.fill(' '); // Skriv ut en tabell cout << setw(5) << "i" <<
17 setw(12) << "array[i]" << endl; for(int i=0;i<n;i++) cout << setw(5) << i << setw(12) << array[i] << endl;
18 Medlemsfunktioner för konstanta objekt För att vi skall kunna använda konstanta IntArr-objekt måste vi införa ytterligare en överlagrad []-operator. class IntArr public: IntArr(int); // IntArr(const IntArr& ia); // "Copy"-konstruktor ~IntArr(); int& operator[](int); int operator[](int) const; IntArr& operator=(const IntArr&); private: int *arr; int limit; ;
19 Copy-konstruktorn används när vi anropar funktioner med värdeanrop men inte när vi använder referensanrop (det sker ingen kopiering då). Slutsats En value-class bör som regel redan från början förses med följande: 1. En default konstruktor 2. En Copy-konstruktor 3. En tilldelningsoperator 4. En destruktor. Det kan hända att någon av ovanstående är uppenbart onödig eller ger uppenbara nackdelar men programmeraren bör vara medveten om vilka konsekvenser det kan innebära att någon av dem saknas.
20 STANDARDMALL // En standardmall för värdeklasser class A public: // Standardkonstruktorer A(void); // Default konstruktor A(A&); // Copy - konstruktor // Tilldelningsoperator A& operator=(const A&); // Destruktor ~A(); /* Här definieras övriga metoder mm. */ //... protected: //... private: //... ; När skall standardmallen användas? Konkreta datatyper skall följa standardmallen för att på ett fullgott sätt integreras med andra standardtyper och för att kunna användas på samma sätt som dessa (funktionsanrop, initieringar, tilldelningar mm). Abstrakta datatyper behöver inte alltid följa mallen men bör göra det om: - du vill göra tilldelningar - du vill skicka objekt genom värdeanrop - objekten har en pekare till något - om destruktorn använder delete på en datamedlem Du skall använda standardmallen för alla icketriviala klasser
21 (B) Tilldelning/initiering innebär delning Vi ska nu visa en modell för hur man i stället för att kopiera i samband med tilldelning och initiering medvetet kan välja att låta objekten dela en resurs (t.ex. referera till samma minnesutrymme). Vi skall fortfarande bl.a. undvika att: vi använder "delete" på samma adress två gånger samt de oönskade konsekvenser som detta får. vi tappar bort det minne som ett objekt allokerar (array1). Däremot kommer manipulation av ett objekt att innebära att detta påverkar andra objekt som referererar till samma resurs. Detta kan leda till att vi väljer att betrakta resurser som konstanta. Referensräknare:exempel Vi kommer att använda en metod som brukar gå under beteckningen Handle-Body-idiomet". Vi kommer att använda två klasser. Den ena kommer att vara gränsnitt (handle) mot den andra som motsvarar själva resursen (body). Public Handle Private Handle Handle Body 3 referenser Bodyklass Vår bodyklass har bara inkapslade medlemmar och har ResursHandle som vänklass. Vi kan alltså bara komma åt en resurs via en handle. // Detta är en "resurs" som skall administreras.. class ResursBody friend ResursHandle; private: ResursBody(); ~ResursBody();
22 ; long number; // referensräknare static long totalnumber; // För kontroll Så här har vi definierat medlemsfunktionerna... long ResursBody::totalnumber = 0; ResursBody::ResursBody() : number(1) totalnumber++; ResursBody::~ResursBody() totalnumber--; Handleklass Vår handleklass har medlemmar för initiering och tilldelning samt en pekare till en resurs. class ResursHandle public: ResursHandle(); ResursHandle(const ResursHandle& rh); ResursHandle& operator=(const ResursHandle& rh); ~ResursHandle(); void dumpthis() const; static void dumptotal(); private: ResursBody *body; static long totalnumber; ;
23 Nedan visas hur medlemsfunktionerna är definierade... long ResursHandle::totalnumber = 0; ResursHandle::ResursHandle() body = new ResursBody; totalnumber++; ResursHandle::ResursHandle(const ResursHandle& rh) body = rh.body; rh.body->number++; totalnumber++; ResursHandle& ResursHandle::operator=(const ResursHandle& rh) if (this!=&rh) rh.body->number++; if (--body->number <= 0) delete body; body = rh.body; return *this; ResursHandle::~ResursHandle() if (--body->number<=0) delete body; totalnumber--; void ResursHandle::dumpthis() const cout <<"Detta är ett handtag till en resurs på adress " << body <<" med "<<body->number <<" referens(er)\n"; void ResursHandle::dumptotal () cout << "Det finns totalt " << ResursBody::totalnumber << " resurs(er) och " << ResursHandle::totalnumber << " handtag allokerade\n";
24 Dessutom använder vi en klass för kontroll av antalet objekt före och efter main: Vi skapar ett globalt objekt av typ Kontroll. Klassens konstruktor anropas före main och dess destruktor efter main. class Kontroll public: Kontroll() cout << "Före main:\n"; ResursHandle::dumptotal(); ~Kontroll() cout << "Efter main:\n"; ResursHandle::dumptotal(); dummy; I main prövar vi att skapa objekt samt att göra tilldelningar och initieringar... main() ResursHandle a,b; // Två objekt cout << "Efter \"ResursHandle a,b;\":\n"; a.dumpthis(); b.dumpthis(); ResursHandle::dumptotal(); ResursHandle c = a; // Initiering... cout << "Efter \"ResursHandle c = a;\":\n"; a.dumpthis();b.dumpthis();c.dumpthis(); ResursHandle::dumptotal(); b = a; // Tilldelning cout << "Efter \"b = a;\":\n"; a.dumpthis(); b.dumpthis();c.dumpthis(); ResursHandle::dumptotal(); return 0;
25
26 Övningar Övning 1 Antag att vi kommer att göra ett lagersystem där lagerartiklarna har ett idnr, ett namn, en beskrivning, ett pris samt antal artiklar på lagret. Implementera en klass som kan användas för att hantera LagerObjekt. Namn och beskrivning utgörs av pekare till godtyckligt stora teckenfält på heapen.. Ge klassen defaultkonstruktor, copykonstruktor, tilldelningsoperator och destruktor samt övriga metoder, konstruktorer och attribut som du anser behövs. Försök sedan att verifiera att objekt av din typ går att använda vid tilldelning och initiering på ett riskfritt sätt (inklusive funktionsanrop). Övning 2 I ett program förekommer ofta strängar som är och skall vara konstanta. Om dessa används vid tilldelning och initiering av andra konstanta strängar är det onödigt att utföra kopiering. Inför typen ConstStreng som en handleklass till klassen Streng som skall vara en "standard strängklass". Inför referensräkning och se till att kopiering av en ConstStreng inte innebär kopiering av en Streng utan att antalet referenser räknas upp. På samma sätt skall ett Strengobjekt frigöras endast om antalet referenser är noll. Ge klassen ConstStreng defaultkonstruktor, copykonstruktor, tilldelningsoperator (?) och destruktor samt övriga metoder, konstruktorer och attribut som du anser behövs. Försök sedan att verifiera att objekt av din typ går att använda vid tilldelning och initieringar på ett riskfritt sätt (inklusive funktionsanrop). Pröva också att anropa strlen, strcpy och liknande funktioner med objekt av typen ConstStreng som parametrar. Övning 3 Implementera en klass för en länkad lista för objekt av t.ex. typen LagerObjekt som du gjorde i den första övningen. Klassen kan t.ex. heta LagerLista. Ge klassen LagerLista defaultkonstruktor, copykonstruktor, tilldelningsoperator och destruktor samt övriga metoder, konstruktorer och attribut som du anser behövs. Försök sedan att verifiera att objekt av din typ går att använda vid tilldelning och initieringar på ett riskfritt sätt (inklusive funktionsanrop). Övning 4
27 Antag att det i ett program förekommer konstanta länkade listor av typen LagerLista som du gjorde i föregående uppgift. Inför klassen ConstLagerLista som skall vara en handleklass till LagerLista. Om dessa används vid tilldelning och initiering av andra listor är det onödigt att utföra kopiering. Inför referensräkning och se till att kopiering av en ConstLagerLista inte innebär kopiering av en utan att antalet referenser räknas upp. På samma sätt skall ett LagerLista-objekt frigöras endast om antalet referenser är noll. Ge klassen ConstLagerLista defaultkonstruktor, copykonstruktor, tilldelningsoperator och destruktor samt övriga metoder, konstruktorer och attribut som du anser behövs. Försök sedan att verifiera att objekt av din typ går att använda vid tilldelning och initieringar på ett riskfritt sätt (inklusive funktionsanrop).
KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar
KLASSER Inkapsling Abstrakt datatyp Public och private Klassmedlemmar Datamedlemmar Funktionsmedlemmar Initiering av objekt Konstruktor Ta del av objektets tillstånd Förändra objektets tillstånd Avinitiera
Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer
Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics
Introduktion till arv
Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering
Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26
Programmering i C++ EDA623 Mer om klasser EDA623 (Föreläsning 6) HT 2013 1 / 26 Mer om klasser Innehåll Konstanta objekt Statiska medlemmar Pekaren this Vänner (friends) Överlagring av operatorer EDA623
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Klasser - speciella medlemsfunktioner Eric Elfving Institutionen för datavetenskap En klass ansvarar ofta för en resurs. Ibland är resursen så enkel som en datamedlem
Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar
Innehåll EDAF30 Programmering i C++ 3. Mer om klasser. Funktionsanrop Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser pekaren this const för objekt och medlemmar Kopiering friend inline 2 Funktionsanrop
Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT 2013 1 / 33
Programmering i C++ EDA623 Objektorienterad programutveckling EDA623 (Föreläsning 5) HT 2013 1 / 33 Objektorienterad programutveckling Innehåll Grundläggande begrepp Relationer mellan objekt Grafisk representation
Dynamisk bindning och polymorfism
Dynamisk bindning och polymorfism I C++ är pekare till basklasser polymorfa, dvs de kan peka på objekt av en subklass typ Vid statisk bindning sker all bindning vid kompileringen -> Vid ett metodanrop
Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap
Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser. Vi får också möjlighet att referera
Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.
KAPITEL 8 Klasser Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering. 169 Hittills: Enkel datatyp: double, int, char Operationer: förutbestämda, t ex +,
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser.
Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv
Programsystem konstruktion med C++ (2D1387) övning 2 klasser och arv Ronnie Johansson rjo@nadakthse grupp 4 2003 09 25 Innehåll Klasskonstruktorer och initieringslistor Klassdestruktorer Åtkomstkontroll
TDIU01 Programmering i C++
TDIU01 Programmering i C++ Föreläsning 6 - Klasser Eric Elfving, eric.elfving@liu.se Institutionen för datavetenskap (IDA) Avdelningen för Programvara och system (SaS) Klasser När vi skapade vår lista
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng
Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng Klasser som skall bli "envisa" Klassen Anstelld skall
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {
Innehåll EDAF30 Programmering i C++ Arv. Polymorfism. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Kort om dynamisk polymorfism Virtuella funktioner 2 Arv i C++ Konstruktorer och destruktorer Tillgänglighet
Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder
Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i
Skapa, kopiera och destruera klassobjekt
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Avdelningen för Programvara och system Tommy Olsson 2013-08-12 Skapa, kopiera och destruera klassobjekt Detta dokument tar upp viktiga, grundläggande
Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT 2013 1 / 42
Programmering i C++ EDA623 Arv EDA623 (Föreläsning 6) HT 2013 1 / 42 Arv Innehåll Härledda klasser Konstruktorer och destruktorer vid arv Tillgänglighet Polymorfism och dynamisk bindning Abstrakta klasser
Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:
8. Objektorientering Skälet till att C++ är ett av de mest använda programspråken är att det är objektorienterat. Detta bygger vidare på begreppet struct (ursprungligen från språket C som inte är objektorienterat),
Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Programvara och system Tommy Olsson 2014-02-05 Lektionsplanering.................................. 2 Lektion 1..........................................
Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv
Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv utan polymorfism
Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.
Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett
Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv
Kapitel 2 Klasser Medlemmar Arv, medlemmar och arv Klasser, åtkomst Medlemmar, medlemsfunktioner, inline och destruktorer this-pekaren Arv, åtkomst Multipelt arv, virtuell basklass Konstanta funktioner
Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto
Objekt och klasser - Introduktion Objekt Ð Begreppet objekt Ð Hur klasser anvšnds fšr att skapa objekt Ð Fšr-definierade klasser Ð Metoder och parameteršverfšring Ð Definiera klasser Ð Modifierare Ð Statiska
Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning: Synlighet Överlagring av operatorer Slide 1 Vänner till klasser och funktioner
Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning: Klasser, åtkomst Medlemmar, medlemsfunktioner, inline Slide 1 Konstruktorer Destruktorer
Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering
Innehåll EDAF30 Programmering i C++ 6. Resurshantering Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Resurshantering Stack-allokering Heap-allokering: new och delete 2 Smarta pekare 3 Klasser, resurshantering
Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )
TDDC76 PoD OH Föreläsning C++ 83 Operatoröverlagring endast operatorsymboler definierade i C++ kan överlagras + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]
1 Klasser och objektorientering Vad är objektorientering?
1 Klasser och objektorientering Vad är objektorientering? Det finns olika synsätt på programmering, dessa olika synsätt kallas för paradigm. De vanligaste paradigmen är det imperativa/proceduriella, det
Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)
Innehåll EDAF30 Programmering i C++ 8. Typomvandlingar. Klasser: operatorer och polymorfism. 1 Typomvandlingar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Klasser Operatorer 3 Polymorfism och arv
maxlist-1. Indexerad lista Länkad lista
Datorer och programmering TDB2: Lista - en dynamisk datastruktur Eva Pärt-Enander Vad är en lista? En lista är en sekventiell struktur oftast av likadana saker. Listor denieras i C++ ofta med hjälp av
Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.
Det objektorienterade synsättet A - 1 Objekt A - 2 Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med. De enskilda variablerna i programmet, de s.k. objekten,
Tommy Färnqvist, IDA, Linköpings universitet
Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings
Objekt och klasser - Introduktion
Objekt och klasser - Introduktion Begreppet objekt Hur klasser används för att skapa objekt Fördefinierade klasser Metoder och parameteröverföring Definiera klasser Modifierare Statiska variabler och metoder
Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet
Kapitel 3 Klassanvändning Operatorer Pekare Kapitel 3 - Klassanvändning, operatorer och pekare Vänner till klasser och funktioner Virtuella funktioner och polymorfi Abstrakta basklasser och strikt virtuella
TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00
TENTAMEN CD5250 Objektorienterad programutveckling med C++, 5p Max poäng: 40 Betygsgränser: 3: 20 4: 28 5: 36 Datum: 1999-06-01, Tid: 14:00-19:00 Ansvarig: Ivica Crnkovic Upp till 5 poäng kan komma från
Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan
Vad är en klass? Övnin 2 Daens ämne är klasser och hur de hanteras. Vi kommer att bya upp ett exempel stevis och illustrera en hel del möjliheter, men också problem och saker man bör vara vaksam på. ffl
5 Arv och dynamisk bindning FIGUR
5 Arv och dynamisk bindning Arv är en av hörnstenarna i objektorienterad programmering. Med hjälp av arv kan man skapa underhållsvänliga och förändringsvänliga system. Att hitta arvsrelationer är en viktig
Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling
metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man
Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser
Innehåll EDAF30 Programmering i C++ Resurshantering. Objektorientering. Klasser. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Typdeklarationer och typomvandling 2 Resurshantering Stack-allokering Heap-allokering:
Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin
Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 Hjälpmedel: Inga hjälpmedel är tillåtna
3. Minneshantering - (copy)konstruktorn, destruktorn och tilldelningsoperatorn
3. Minneshantering - (copy)konstruktorn, destruktorn och tilldelningsoperatorn Minneshantering har väldigt lite med objektorienterad programmering att göra, många objektorienterade programspråk implementerar
Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010
Programsystemkonstruktion med C++: Övning 2 Karl Palmskog palmskog@kth.se september 2010 Specalfunktioner i klasser Konstruktorer i konstruktorerna för en klass initieras klassens medlemmar initialvärden
Tillämpad programmering
Tillämpad programmering C++ objekt Johan Montelius 1 struct struct Person { string name; int age; ; Person p; p.name = Joe ; p.age = 42; cout
(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java
(Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart
Programsystemkonstruktion med C++
Programsystemkonstruktion med C++ Övning 2 Daniel Aarno bishop@kth.se Översikt övning 2 Klasser Konstruktorer Destruktorer Arv Virtuella funktioner Abstrakta klasser Operatorer Templateklasser Templatefunktioner
public och private Obs: private inte skyddar mot access från andra objekt i samma klass.
public och private En metod som är public får anropas från alla metoder i alla klasser. Ett attribut som är public får avläsas och ändras från alla metoder i alla andra klasser. En metod som är private
Tentamen ID1004 Objektorienterad programmering October 29, 2013
Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.
Synlighet. Namespace Scope-operatorn Klasser Vänner
Synlighet Namespace Scope-operatorn Klasser Vänner Synlighet Ett problem med moduler i C är att alla variabel- och funktionsnamn ligger globalt synliga. C++ botar detta genom att införa det mycket användbara
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc
Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp
Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser
Föreläsning 1 Innehåll Introduktion till objektorientering OOP (objektorienterad programmering) Objekt, instanser, klasser C++ OO i C++ Standardbibliotek Utökningar från C (syntaktiskt socker) Introduktion
DAT043 - Föreläsning 7
DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar
Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33
Programmering i C++ EDA623 Typer EDA623 (Föreläsning 4) HT 2013 1 / 33 Typer Innehåll Heltalstyper Flyttalstyper Pekare Minnesallokering Funktionspekare Typdeklarationer med typedef Typomvandlingar (casting)
Inledande programmering med C# (1DV402) Tärningarna ska kastas
Tärningarna ska kastas Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll
Övningar Dag 2 En första klass
Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt
Java, klasser, objekt (Skansholm: Kapitel 2)
Java, klasser, objekt (Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Objectorienterad programmering Sida 1 Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma
1. Klass med en dynamiskt allokerad variabel, definitionsfilen-del Klass med en dynamiskt allokerad variabel, inkluderingsfilen.
1. Klass med en dynamiskt inkluderingsfilen Klass2-1 1. Klass med en dynamiskt definitionsfilen-del 1 Klass2-2 #ifndef person #define person #include #include class Person private:
Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private
Inkapsling tumregler Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler Tobias Wrigstad (baserat på material från Tom Smedsaas) 5 november 2010 1. Man skall
Tentamen *:85/2I4123 C
DSV Sid 1(6) *:85/2I4123 Jozef Swiatycki 2006-01-21 Tentamen *:85/2I4123 C++ 2006-01-21 Denna tentamen består av fyra uppgifter som tillsammans kan ge maximalt 30 poäng. För godkänt resultat krävs minst
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på både fram- och
TDIU20 - Objektorienterad programmering i c++ - föreläsning 4
TDIU20 - Objektorienterad programmering i c++ - föreläsning 4 Pontus Haglund Department of Computer and information science 1 Vad gjorde vi förra gången? Felhantering Operatorer Typkonvertering 2 Grundläggande
UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.
Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language
Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar
Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }
En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class
Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar
Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Typomvandling 2 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv
Polymorfi. Objektorienterad och komponentbaserad programmering
Polymorfi Objektorienterad och komponentbaserad programmering Polymorfi, mångtydighet Polymorfi innebär att en viss konstruktion kan exekveras på olika sätt Överlagring av metoder ger ett polymorft beteende
C++ Objektorientering - Klasser. Eric Elfving
C++ Objektorientering - Klasser Eric Elfving 1 / 20 Återblick struct struct är bra att ha för att skapa aggregat - slå ihop flera data till en ny datatyp. Ett problem med struct är åtkomst... 2 / 20 Följande
TDDC76 Programmering och datastrukturer
TDDC76 Programmering och datastrukturer Arv, polymorfi och objektorienterad programmering Oskar Holmström Institutionen för datavetenskap Agenda 1 Pekare 2 Arv 3 Statisk bindning 4 Polymorfi 5 Destruktorer
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
Att använda pekare i. C-kod
Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare
Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering
och metoder Introduktion till objektorienterad programmering Markus Saers markus.saers@lingfil.uu.se orientering Deklarativ programmering Beskriver förutsättningarna för något Prolog Imperativ programmering
Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare
Vad är en pekare? Varför använder vi pekare? Hur används pekare? Hur deklarerar vi pekare i C? Hur kommer vi åt pekarvärdet? DAVA07/08 JE,MG,MG,PS 2 DAVA07/08 JE,MG,MG,PS Vad är en pekare? En pekare är
Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser
Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,
F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander
F4 Klasser och Metoder ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Klasser och objekt Klasser definierar (utgör idén) Objekt instantierar (utgör förekomsten) En klassdefinition Många
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Klas Arvidsson Institutionen för datavetenskap 1 / 33 UML UML är ett grafiskt språk som (bland mycket annat) används för
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
Föreläsning 5-6 Innehåll
Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]
1 Funktioner och procedurell abstraktion
1 Funktioner och procedurell abstraktion Det som gör programkonstruktion hanterlig och övergripbar och överhuvudtaget genomförbar är möjligheten att dela upp program i olika avsnitt, i underprogram. Vår
C++-programmets beståndsdelar
C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet
OOP Objekt-orienterad programmering
OOP F5:1 OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling Vi skall nu titta på ett exempel med myror. Varje myra har ett namn
Objektorienterad programmering
Objektorienterad programmering Föreläsning 7 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Konstanter och readonly Statiska klasser Standardklassen Math Parameteröverföring Referensen
Det finns många flaggor till g++,
C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.
Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering
Övriga byggstenar Beroenden Pekare till funktioner Övriga byggstenar Beroenden er Definitioners synlighet Funktionspekare Icke-medlemsfunktioner Medlemsfunktioner 2D1387 Programsystemkonstruktion med C++
Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper
C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet
JAVA Mer om klasser och objektorientering
JAVA Mer om klasser och objektorientering Begreppet package - paket Package används när man t ex vill skapa ett eget bibliotek med klasser. Sen är det då meningen att man ska importera detta paket i det
Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014
Introduktion till Datalogi DD1339 Föreläsning 2 22 sept 2014 Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 public class { public class { Åtkomst, public betyder fullt tillgänglig utifrån public
Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer
Exempel for (int antal=; antal < 75; antal++) System.out.println (antal); Arrayer for (int num=5; num
F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander
F7 - Arrayer ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Array, arrayer, arrayen En array är en lista av variabler av samma typ Arrayen har en fast längd (antal element) Enskilda
Kapitel 6 - Undantag
Kapitel 6 Undantag Kapitel 6 - Undantag Undantag (exceptions), returvärden throw, try och catch new, bad_alloc, nothrow Undantag och std::auto_ptr throw() i funktionsdeklaration try som funktionskropp
int (*fp) (char, char*) //pekare till funktion som tar //argumenten (char, char*) och //returnerar int
Pekare char v[10]; //array med 10 characters char* p; //pekare till characters //p pekar på v's fjärde element p = &v[3] p & är "adressen-av" operatorn. För de flesta typer T gäller att T* är typpekare.
Arv bakgrund (kap. 9)
Föreläsning 4 Arv bakgrund (kap. 9) Hund pälsfärg favoritben smutsa_ned() ät_katt() Kanin pälsfärg slaktvikt smutsa_ned() Katt pälsfärg smutsa_ned() klös_soffa() Arv bakgrund Många klasser delar på egenskaper
F5: Högnivåprogrammering
F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data via
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Tisdagen den 28 oktober 2014, 08:00-12:00
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Tisdagen den 28 oktober 2014, 08:00-12:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor.
F5: Högnivåprogrammering
1 F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data
Minnestilldelning (allokering) och frigörande (avallokering) av minne
Pekare i C++ Pekare används mycket i C++. De är bra både för att de tillåter dynamisk minnesallokering och för att de är referenser. En pekarvariabel innehåller en adress till ett element, den pekar på
Arrayer. results
Arrayer 85 Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1
int iarray[]= new int[3]; // deklarera ett heltalsfält med tre heltal int jarray[]={ 1, 3, 5, 7, 9, 11, 13, 15}; // initierat fält 8 element
1 Arrayer Vid beräkningar med större datamängder än några enstaka tal är det bekvämt att kunna betrakta en talmängd som en enhet. Detta åstadkommer man genom att deklarera och instantiera fält. Ett annat