Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Hasonló dokumentumok
Számítógép és programozás 2

Bevezetés a programozásba Előadás: A const

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Bevezetés a programozásba Előadás: Fordítási egység

Bevezetés a programozásba. 9. Előadás: Rekordok

Programozás II gyakorlat. 8. Operátor túlterhelés

Programozás II. 4. Dr. Iványi Péter

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Pénzügyi algoritmusok

C++ programozási nyelv Konstruktorok-destruktorok

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Objektumok inicializálása

Osztályok. 4. gyakorlat

3. Osztályok II. Programozás II

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

OOP #14 (referencia-elv)

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Objektumelvű programozás

Programozás C++ -ban 2007/7

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozás C++ -ban

Programozás C++ -ban 2007/4

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Programozás II. 6.Öröklés Dr. Iványi Péter

Programozás módszertan

Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek

Programozás alapjai II. (4. ea) C++

0.2.1 Operátorok túlterhelése (műveletek definiálhatók felhaszn. típusokra) Kutya. Eb1. Eb2. Név (txt): Rex. Blöki. Német juhász 3

Bevezetés a programozásba előadás: Öröklődés

C++ programozási nyelv

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

Programozás alapjai II. (2. ea) C++

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Java programozási nyelv 4. rész Osztályok II.

500. AA Megoldó Alfréd AA 500.

ISA szimulátor objektum-orientált modell (C++)

Osztály és objektum fogalma

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

4. Öröklődés. Programozás II

Programozás alapjai II. (2. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Bevezetés, a C++ osztályok. Pere László

Programozás alapjai II. (3. ea) C++

Bevezetés a programozásba I.

Programozás alapjai II. (4. ea) C++

Programozás alapjai II. (4. ea) C++

Bevezetés a Python programozási nyelvbe

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Mit ír ki? feladatok megoldásokkal

Programozás alapjai II. (3. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

Programozás C és C++ -ban

Java és web programozás

Bevezetés a programozásba 2

Programozási nyelvek Java

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Programfejlesztés. Programozás alapjai II. (3. ea) C++ Néhány programozási módszer. Korai szoftverkészítés jellemzői. Gépi nyelv? Strukturált tervezés

Programozási alapismeretek 4.

Globális operátor overloading

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Objektumorientált programozás IX. Osztályok, objektumok

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Programozás alapjai II. (2. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

500. CC Megoldó Alfréd CC 500.

Programozási nyelvek Java

Programfejlesztés. Programozás alapjai II. (3. ea) C++ Néhány programozási módszer. Korai szoftverkészítés jellemzői. Gépi nyelv? Strukturált tervezés

Google C++ style guide

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

Már megismert fogalmak áttekintése

Programozási nyelvek Java

Pénzügyi algoritmusok

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

Öröklés és Polimorfizmus

Java és web programozás

AA MEGOLDÓ ALADÁR AA

Programozás I. Grafika Eseménykezelés. Programozás I. 2. gyakorlat Interakció a grafikus felületen, tagfüggvények. Surányi Márton PPKE-ITK

C++ programozási nyelv Konstruktorok Gyakorlat

C++ programozási nyelv Struktúrák a C++ nyelvben

Informatika terméktervezőknek

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

BME MOGI Gépészeti informatika 8.

Java és web programozás

#include <iostream> using namespace std; // struct macska is lehetne class macska { public: int kor; int suly; }; void main() { macska cirmi;

Szövegek C++ -ban, a string osztály

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Programozás C++ -ban

Átírás:

Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum

Ismétlés int main() { string s; s; s= bla ; cout << << s.length();

Tagfüggvény hívása Kell hozzá változó objektum Mező jellegű,. alakú hozzáférés, az objektumnak valami sajátjáról van szó Függvény jellegű szintaxis, zárójelek, esetleg paraméterek Első félévben sok ilyet láttunk, előadáson is szerepelt

Hasonló megoldás struct Particle { int x,y; unsigned char r,g,b; ; ; void rajzol(particle p) p) { gout << << move_to(p.x, p.y) << << color (p.r, p.g, p.b) << << dot; Particle p; p; rajzol(p);

Tagfüggvényesítés struct Particle { int x,y; unsigned char r,g,b; void rajzol(particle p) p) { gout << << move_to(p.x, p.y) << << color (p.r, p.g, p.b) << << dot; ; ;

Tagfüggvény struct Particle { int x,y; unsigned char r,g,b; void rajzol() { gout << << move_to(x, y) y) << << color (r, g, g, b) b) << << dot; ; ; Particle p; p; p.rajzol();

Tagfüggvényhasználat Elsődleges szerep: a típus saját műveleteinek nyelvi egysége az adatokkal A típus: adat és művelet Jótékony hatása: Az adatmezőkre hivatkozás feleslegessé válik Ezért funkció változtatáskor sokszor elég a tagfüggvényekhez nyúlni Ezek a programkód jól meghatározható részét alkotják, nem lesz kifelejtve semmi

Másik szintaxis struct Particle { int x,y; unsigned char r,g,b; ; ; void rajzol(particle p) p) { gout << << move_to(p.x, p.y) << << color (p.r, p.g, p.b) << << dot;

Másik szintaxis struct Particle { int x,y; unsigned char r,g,b; ; ; void Particle::rajzol() { gout << << move_to(p.x, p.y) << << color (p.r, p.g, p.b) << << dot;

Másik szintaxis struct Particle { int x,y; unsigned char r,g,b; void rajzol(); ; ; void Particle::rajzol() { gout << << move_to(x, y) y) << << color (r, g, g, b) b) << << dot;

Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); ; ; void Particle::rajzol() { gout << << move_to(x, y) y) << << color (r, g, g, b) b) << << dot;

Kétféle szintaxis Egyelőre bármelyik használható Nincs jobb vagy rosszabb Ha egy típusunknak csupa egyszerű tagfüggvénye van, vagy fontosnak ítéljük a forráskód megtartását, úgy az első írásforma a jobb Ha könyvtárat akarunk fordítani, el kell választani a felületet a megvalósítástól, a bonyolultabb, vagy épp ki nem adandó kódot előre lefordíthatjuk

Láthatóság szabályozása struct Particle { private: int x,y; unsigned char r,g,b; public: void rajzol(); ; ; void Particle::rajzol() { gout << << move_to(x, y) y) << << color (r, g, g, b) b) << << dot;

Láthatóság szabályozása private: csak a tagfüggvények számára látható public: a külvilág számára is látható cél: reprezentáció változása ne jelentsen problémát ökölszabály: mezők private, tagfüggvények public van sok kivétel getter/setter: csupán mező lekérdezésére és beállítására használt tagfüggvény. Ha sok van mindkettőből, az rossz jel.

Osztály, objektum Egy olyan struct, ami megvalósítja a láthatóság szabályozásával és a tagfüggvényekkel, hogy a reprezentációjától függetlenül hasznos, szokás osztálynak nevezni Azt a változót, aminek a típusa osztály, szokás objektumnak nevezni Objektum orientált programozás, OOP Egységbezárás

Speciális tagfüggvények Konstruktor Destruktor Másoló konstruktor Értékadó operátor Ezek mindegyike objektum létrejöttével, megszűnésével, vagy másolásával foglalkoznak Ha te nem írsz, akkor is van!

Konstruktor struct Particle { int x,y; unsigned char r,g,b; Particle() { x=y=r=g=b=0; ; ; Particle p; p;

Konstruktor Az objektum létrejöttekor fut le A neve a típus neve Kezdeti érték adható a mezőknek Ha nem írsz konstruktort, az alapértelmezett konstruktor paraméter nélküli, és nem csinál semmit Ha írsz konstruktort, nem készül alapértelmezett konstruktor Több konstruktor is lehet, ha eltérnek paraméterezésben

Paraméteres konstruktor struct Particle { int x,y; unsigned char r,g,b; Particle(int X,int Y) Y) { x=x; y=y; r=g=b=0; ; ; Particle p(100,100);

Paraméteres konstruktor struct Particle { int x,y; unsigned char r,g,b; Particle(int X,int Y) Y) { x=x; y=y; r=g=b=0; ; ; Particle p(100,100); Particle q; q;

Paraméteres konstruktor Nagyon hasznos: csak úgy lehet példányt csinálni, hogy rákényszerülünk a kezdeti értékről való gondoskodásra Ugyanakkor néhány kényelmetlenség felmerül Csak úgy nem lehet mező típusa Csak úgy nem lehet vector<ide> -ba tenni Ezek megoldhatóak vector<particle> v(10, Particle(10,10));

Paraméteres konstruktor mint mező struct Particle { Particle(int X,int Y) Y) { x=x; struct y=y; TextParticle r=g=b=0; { Particle p; p; string int s; x,y; s; ; ; unsigned char r,g,b; ; ; TextParticle t; t;

Paraméteres konstruktor mint mező struct Particle { Particle(int X,int Y) Y) { x=x; struct y=y; TextParticle r=g=b=0; { Particle p; p; string int s; x,y; s; TextParticle() unsigned : char r,g,b; p(0,0){ s= bla ; ; ; ; ; TextParticle t; t;

Konstruktor örökítés Mezők kezdeti értékét úgy is meg lehet adni, ha a konstruktor mögé kettősponttal felsoroljuk, és konstruktorparaméterként adjuk meg a kezdetiértéket Ha nincs paraméter nélküli konstruktora a mezőnek, ez az egyetlen mód a példányosításra Ez mellesleg kicsit hatékonyabb az értékadásnál

Destruktor struct Particle { int x,y; unsigned char r,g,b; ~Particle() { cout << << kampec ; ; ; { Particle p; p;

Destruktor Az objektum megszűnésekor fut le A neve a típus neve, egy ~ jellel Lehet takarítani az objektum után hasznos példányszámlálásnál Nincs paramétere Ha nem csinálsz, lesz alapértelmezett, ami nem csinál semmit

Másoló konstruktor struct Particle { int x,y; unsigned char r,g,b; Particle(const Particle &a) { x=a.x; y=a.y; Particle p; p; ; ; Particle q(p); Particle w=p;

Másoló konstruktor Copy constructor A neve a típus neve, paramétere fix Lefut többek között érték szerinti paraméterátadásnál kifejezés kiértékeléskor átmeneti érték tárolására vectorban: egy konstruktor fut le és lemásolódik sok példányban Ha nem írsz másoló konstruktort, akkor is lesz egy, ami minden mező másoló konstruktorát hívja meg

Másoló konstruktor struct struct A { int int a,b; a,b; int int &r; &r; A(int A(int pa, pa, int int pb) pb) :r(a) :r(a) { a=pa; a=pa; b=pb; b=pb; ; ; int int main() main() { A x(1,2); x(1,2); cout cout << << x.a x.a << << x.b x.b <<x.r <<x.r << << endl; endl; A y(x); y(x); y.a=3; y.a=3; y.b=4; y.b=4; cout cout << << x.a x.a << << x.b x.b << << x.r x.r << << endl endl << << y.a y.a << << y.b y.b << << y.r y.r << << endl; endl;

Másoló konstruktor struct struct A { referencia int int a,b; a,b; int int &r; &r; A(int A(int pa, pa, int int pb) pb) :r(a) :r(a) { a=pa; a=pa; b=pb; b=pb; ; ; kezdeti érték másolás int int main() main() { A x(1,2); x(1,2); cout cout << << x.a x.a << << x.b x.b <<x.r <<x.r << << endl; endl; A y(x); y(x); y.a=3; y.a=3; y.b=4; y.b=4; cout cout << << x.a x.a << << x.b x.b << << x.r x.r << << endl endl << << y.a y.a << << y.b y.b << << y.r y.r << << endl; endl; átmutat x-be!

Másoló konstruktor Akkor szokás megírni, ha a mezőnkénti másolás nem elég tartalmaz referenciát a típus bizonyos értékeknek különbözniük kell Szerencsés esetben nincs rá szükség nincs referencia típus a mezőnkben aminek mégis van, annak már van saját másoló konstruktora (ilyen pl. a vector)

Értékadó operátor struct Particle { int int x,y; unsigned char r,g,b; Particle & operator=(const Particle &a) &a) { x=a.x; y=a.y; return *this; ; ; Particle p; p; Particle q; q; q=p;

Értékadó operátor Értékadáskor hívódik meg A neve operator=, visszatérési típusa a saját típusra referencia, paramétere fix Mindig visszaadja saját magát: *this Emiatt lehet a=b=c; értékadást írni Ha nem írsz értékadást, az alapértelmezett minden mezőre értékadást hív

Összefoglalás Minden struct kibővíthető tagfüggvényekkel Ezek a mezőket változóként kezelhetik, hiszen meghíváskor szükség volt az implicit paraméterre A :: jelzi, hogy egy típus tagfüggvényét írjuk le A *this jelenti az implicit paramétert belülről A speciális tagfüggvények akkor is léteznek, ha nem írod meg őket, érdemes tudni, mit csinálnak