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

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

Virtuális függvények (late binding)

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Osztály és objektum fogalma

Származtatási mechanizmus a C++ nyelvben

Objektumok inicializálása

A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók:

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

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

C++ programozási nyelv Konstruktorok-destruktorok

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.

Osztályok. 4. gyakorlat

Osztálytervezés és C++ implementációs ajánlások I.

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

C++ programozási nyelv

Programozás C++ -ban

Java programozási nyelv 5. rész Osztályok III.

Programozás C++ -ban

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?

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

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

Elemi Alkalmazások Fejlesztése II.

OOP: Java 8.Gy: Abstract osztályok, interfészek

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

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

Kivételkezelés a C++ nyelvben Bevezetés

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

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

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

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

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

A C programozási nyelv IV. Deklaráció és definíció

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

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

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) {} };

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés)

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

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

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

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

Java és web programozás

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

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

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

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

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Web-technológia PHP-vel

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

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

Bevezetés a Python programozási nyelvbe

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

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

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

Programozás C++ -ban

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

5. Gyakorlat. struct diak {

Programozási nyelvek Java

Java és web programozás

Programozás C++ -ban 2007/7

1. Bevezetés A C++ nem objektumorientált újdonságai 3

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

Öröklés és Polimorfizmus

BME MOGI Gépészeti informatika 8.

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

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Osztály tervezési szempontok és C++ implementációs ajánlások

Objektumorientált szoftverfejlesztés alapjai

Google C++ style guide

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Objektumorientált programozás C# nyelven

C++ programozási nyelv

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Objektumelvű programozás

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

1. Alapok. Programozás II

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Java és web programozás

OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Programozás C++ -ban 2007/4

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

Java IX. telkezelés a Java-ban

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

C++ programozási nyelv

3. Osztályok II. Programozás II

Programozás I. 5. Előadás: Függvények

Java IX. telkezelés a Java-ban

Java II. I A Java programozási nyelv alapelemei

A C programozási nyelv II. Utasítások. A függvény.

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Java II. I A Java programozási nyelv alapelemei

OOP #14 (referencia-elv)

Átírás:

Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma számára egy példányban létezik, azok osztottan használják. Globális változó az osztályra nézve. Nem a this mutatón keresztül történik az elérése. Különbségek a valódi globális változóval szemben: Lehet private (információrejtés) Nem szerepel a globális névtérben, az osztály hatáskörében érvényes (nem lehet névütközés) Bevezetés a C++ programozási nyelvbe CPP7 / 2 Statikus adattag inicializálása Az objektumok előtt kell létrejönnie Az osztályban az adattagnak csak deklarációja lehet A statikus adattag definíciója minden tagfüek kívül helyezkedhet el. Célszerű helye az osztály implementációs file-ja. Inicializálása nem történhet a konstruktorban, csak a definíciójában. Bevezetés a C++ programozási nyelvbe CPP7 / 3

Statikus adattagok használata private adattag Csak osztályon belül használható. Definíciója (és inicializálása) megengedett az osztályon kívül. public adattag Használata sérti az információrejtést Bárhol használható, ahol az osztálya ismert Használható az osztály bármelyik objektumával, vagy osztálynévvel és SCOPE operátorral Nem használható önmagában (osztályhatáskörben van!) Bevezetés a C++ programozási nyelvbe CPP7 / 4 Statikus tagfüggv Tagfü tárolási osztálya is lehet static Az ilyen fü a this mutatóra sem közvetlenül, sem közvetve nem hivatkozhat Következmény: csak statikus adattagokat és statikus tagfüeket használhat. Meghívható az osztály bármelyik objektumával, vagy az osztálynévvel és hatáskör (SCOPE) operátorral. Bevezetés a C++ programozási nyelvbe CPP7 / 5 adattag és tagfü //pelda.hpp class Pelda { // ez csak deklaráció! static int objektumok_szama; // Egyéb adattagok public: Pelda(void); static int darabszam(void); // Egyéb tagfüek }; Bevezetés a C++ programozási nyelvbe CPP7 / 6

// pelda.cpp #include "pelda.hpp" // Itt van a definíció int Pelda::objektumok_szama = 0; Pelda::Pelda(void { objektumok_szama++; } Int Pelda::darabszam(void) { return objektumok_szama; } Bevezetés a C++ programozási nyelvbe CPP7 / 7 // Foprogram // #include "pelda.hpp" #include <iostream.h> void main(void) { Pelda pelda_objektum; // Ez hibás!! // cout << "Objektumok szama:" << // pelda_objektum.objektumok_szama; Bevezetés a C++ programozási nyelvbe CPP7 / 8 // Helyes megoldas: cout << "Objektumok szama:" << pelda_objektum.darabszam() << endl; // Ez is jo: cout << "Objektumok szama:" << Pelda::darabszam() << endl; } Bevezetés a C++ programozási nyelvbe CPP7 / 9

Konstans tagfüggv Minősítése az argumentumlista után tett const alapszóval. Az alapszót mind a fü prototípusában, mind a definícióban ki kell írni. Jelentése: a konstans tagfü nem változtathatja meg egyetlen adattag értékét sem. Egy ilyen utasítás a fü törzsében fordítási hibát okoz. Bevezetés a C++ programozási nyelvbe CPP7 / 10 Konstans tagfüggv (folyt.) Haszna: a programozó szándékainak világosabbá tétele A program olvashatóságának javítása célszerű minden olyan tagfüt így deklarálni, amely nem változtat meg egyetlen adattagot sem. Konstansnak deklarált objektummal csak konstans tagfü hívható meg. Bevezetés a C++ programozási nyelvbe CPP7 / 11 Virtuális destruktor Egy osztály destruktora definiálható virtuálisnak. valamennyi származtatott osztály destruktora is virtuális lesz (bár nevük nem egyezik meg) a virtuális füekre vonatkozó szabályok szerint hívódnak meg. Bázisosztály típusú mutatóval megcímzett objektumot megszüntetése esetén a megszüntetendő objektum aktuális típusának megfelelő destruktor aktivizálódik. Bevezetés a C++ programozási nyelvbe CPP7 / 12

Virtuális destruktor (folyt.) A bázisosztályban a destruktor valódi virtuális fü is lehet Ha egy leszármazott osztálynak nincs destruktora, akkor a valódi virtuális fü hívódna meg. Ez tehát kényszeríti a leszármazott osztályokat arra, hogy mindenképpen definiáljanak destruktort. A bázisosztályban a virtuális destruktor üres törzsű fü is lehet minden leszármazott osztály esetén szabadon eldönthető, hogy átdefiniáljuk-e ezt az implementációt Bevezetés a C++ programozási nyelvbe CPP7 / 13