1. Klass med en dynamiskt allokerad variabel, definitionsfilen-del Klass med en dynamiskt allokerad variabel, inkluderingsfilen.

Relevanta dokument
Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.

'\QDPLVNELQGQLQJ. 3RO\PRUILQnJUD EHJUHSS. 3RO\PRUIL ² (Q YLVV NRQVWUXNWLRQ NDQ H[HNYHUDV Sn ROLND VlWW

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

C++ Objektorientering - Klasser. Eric Elfving

TDIU01 Programmering i C++

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

3URJUDPE\JJQDGVNRQVWHQV HOHPHQW $EVWUDNWDGDWDW\SHURFK 'DWDVWUXNWXUHU $EVWUDNWDGDWDW\SHU +HOWDO/LVWD6WDFN. 7DEHOO

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Tillämpad programmering

Programsystemkonstruktion med C++

Arv. Objektorienterad och komponentbaserad programmering

Dynamisk bindning och polymorfism

TDDC76 - Programmering och Datastrukturer

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv


TDDC76 - Programmering och Datastrukturer

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

5 Arv och dynamisk bindning FIGUR

Tillämpad programmering

Innehåll. Pekare Exempel

Tentamen EDAF30 Programmering i C++

Innehåll. Pekare Exempel

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

grundläggande C++, funktioner m.m.

TDIU01 - Programmering i C++, grundkurs

Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Det finns många flaggor till g++,

allokeras på stacken dynamiskt new delete

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Högskolan Dalarna sid 1 av 5 Data-sektionen Hans-Edy Mårtensson

Minneshantering. Minneshantering. Minneshantering. Undvik pekare

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

Skapa, kopiera och destruera klassobjekt

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

TDDC76 - Programmering och Datastrukturer

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering

TDIU01 - Programmering i C++, grundkurs

Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng

Malmö högskola 2007/2008 Teknik och samhälle

Tentamen *:58/ID100V Programmering i C Exempel 3

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Kapitel 6 - Undantag

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

Övningar Dag 2 En första klass

Tommy Färnqvist, IDA, Linköpings universitet

Polymorfi. Objektorienterad och komponentbaserad programmering

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion

maxlist-1. Indexerad lista Länkad lista

Initiering och tilldelning

Introduktion till arv

Djup/ytlig kopiering av containrar med referensobjekt. Allmänt. Vad ska container innehålla?

TDDC76 - Programmering och Datastrukturer

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet

TDDC76 PoD OH Föreläsning C Härledda klasser

TDDC76 Programmering och datastrukturer

Lösningsförslag övning 2.

Funktionens deklaration

Java, klasser, objekt (Skansholm: Kapitel 2)

OOP Objekt-orienterad programmering

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

int (*fp) (char, char*) //pekare till funktion som tar //argumenten (char, char*) och //returnerar int

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

C++-programmets beståndsdelar

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

Övning 4. Arv och andra relationer

Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser

Synlighet. Namespace Scope-operatorn Klasser Vänner

Objekt och referenser

Programmering för språkteknologer II, HT2011. Rum

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tommy Färnqvist, IDA, Linköpings universitet

Transkript:

1. Klass med en dynamiskt inkluderingsfilen Klass2-1 1. Klass med en dynamiskt definitionsfilen-del 1 Klass2-2 #ifndef person #define person #include <iostream.h> #include <string.h> class Person private: char *name; int age; public: Person(void); //Defaultkonstruktorn Person(const char* namn, int alder); int getage(void) const return age; void setage(int alder) age = alder; //-Defaultkonstruktor------------------------------ Person::Person(void) name = new char[1]; name[0] = '\0'; age = 0; //-Konstruktor------------------------------------- Person::Person(const char* namn, int alder) age = alder; const char* getname() const return name; void setname(const char* namn); void print()const; ; #endif 1

1. Klass med en dynamiskt definitionsfilen -del 2 Klass2-3 1. Klass med en dynamiskt instanser av klassen Person Klass2-4 //-setname----------------------------------------- void Person::setName(const char* namn) //-print------------------------------------------- void Person::print()const cout << getname() <<", " << getage() << "år\n"; void main(void) Person kalle("kalle",23); Person *stina = new Person("Stina",24); stina->print(); nisse.setname("nisse"); nisse = *stina; delete stina; stina = new Person[3]; stina->setname("stina Ett"); stina->setage(10); (stina+1)->setname("stina Två"); (stina+1)->setage(20); stina[2].setname("stina Tre"); stina[2].setage(30); for (int i=0; i<3; i++) stina[i].print(); delete [] stina;? =>? => Programmet ger utskriften: Stina, 24 Nisse, 23 Nisse, 23 Stina Ett, 10 Stina Två, 20 Stina Tre, 30, 24 2

Grund kopiering Klass2-5 Djup kopiering Klass2-6 Person kalle("kalle",23); Djup kopiering kalle::name K a l l e \0 # Grund kopiering Bitvis kopiering! Varje databit i ursprungsobjektet kopieras till det nya objektet. I det här exemplet kopieras den adress som pekaren name pekar på och inget mera! kalle::name K a l l e \0 # Om objekten har pekare som pekar på dynamiskt allokerade data så måste den kopierings-konstruktor som finns som default definieras om så att även data fälten kopieras. Det samma gäller för likhetsoperatorn =. Det finns en default operator som fungerar bra så länge som objekten enbart innehåller statiska data men måste definieras om när dynamiska data förekommer. kalle::name K a l l e \0 # nisse::name K a l l e \0 ö < nisse::name 3

2. Klass med en dynamiskt inkluderingsfil Klass2-7 2. Klass med en dynamiskt definitionsfildel 1 Klass2-8 #ifndef person #define person #include <iostream.h> #include <string.h> class Person private: char *name; int age; public: Person(void); Person(const char* namn, int alder); Person(const Person &orginalet); //Kopieringskonst. ~Person(void); //Destruktor int getage(void) const return age; void setage(int alder) age = alder; const char* getname() const return name; void setname(const char* namn); Person& operator=(const Person &orginalet); void print()const; ; #endif //-Konstruktor------------------------------------- Person::Person(void) name = new char[1]; name[0] = '\0'; age = 0; //-Konstruktor------------------------------------- Person::Person(const char* namn, int alder) age = alder; //-Kopieringskonstruktor--------------------------- Person::Person(const Person& orginalet) name = new char[strlen(orginalet.name)+1]; strcpy(name,orginalet.name); age = orginalet.age; //-Destruktor-------------------------------------- Person::~Person(void) 4

2. Klass med en dynamiskt definitionsfildel 2 Klass2-9 2. Klass med en dynamiskt instanser av klassen Person Klass2-10 //-setname----------------------------------------- void Person::setName(const char* namn) void main(void) Person kalle("kalle",23); Person *stina = new Person("Stina",24); //-operator=--------------------------------------- Person& Person::operator=(const Person &orginalet) if (&orginalet!= this) if (strlen(name)!= strlen(orginalet.name)) name = new char[strlen(orginalet.name)+1]; strcpy(name,orginalet.name); age = orginalet.age; return *this; //-print------------------------------------------- void Person::print()const cout << getname() <<", " << getage() << "år\n"; stina->print(); nisse.setname("nisse"); nisse = *stina; delete stina; stina = new Person[3]; stina->setname("stina Ett"); stina->setage(10); (stina+1)->setname("stina Två"); (stina+1)->setage(20); stina[2].setname("stina Tre"); stina[2].setage(30); for (int i=0; i<3; i++) stina[i].print(); delete [] stina; Programmet ger utskriften: Stina, 24 Nisse, 23 Stina Ett, 10 Stina Två, 20 Stina Tre, 30 Stina, 24! =>! => 5

Klass2-11 'X VND NXQQD«'X VND NXQQD I UNODUD EHJUHSSHQ JUXQG RFK GMXS NRSLHULQJ 'X VND NXQQD VNULYD NODVVHU VRP DQYlQGHU G\QDPLVNW DOORNHUDGH IlOW 'X VND YHWD YDG HQ GHVWUXNWRU lu I U QnJRW 'X VND NXQQD VNULYD HQ NRSLHULQJV NXQVWUXNWRU 'X VND NXQQD YHUODJUD WLOOGHOQLQJVRSHUDWRUQ 6