Felhasználó által definiált adattípus

Hasonló dokumentumok
ü ü ó í ö Ö ü ó ö ö Ö ü ö Ö ö ö ö ö ú ö Ó ö ú ö í ö í ö ü ú ü ó í ú ü ó í ö ö ú ó ó ö ü ó ü ö ö ö

É í ű ö ő ü ú ö ü ö ó ö ü í ő ó ú ő ű ú í ő ö ú ő ű ü í ő ó ü ö í ő í ö í ó ó í ó í ó ű ö ö ú í ő ú í í ó í ő í ő ó í ó ó í ó ó í í í í ó ö ö ü ó í ó

ó í ó í ü ü ó ő ó ú í ó ő ú ő ó í ó í ü ö ö ő ó ő ó ö ó ó ű í ü ü í ó í ó ö ö ö ó ű ő ö ő ű ü ó ü ö ü ó ü ü ö í ű ö í ű í ő ő ű ö ö ö ö ő ő ű í ü ö ö

Ö ö í ó ö ó ö ö í í Ü ö Á ö Ö ü ö Ö ü ó í í ö ü ü ö ó ü ú ű ó ó í ú ó Ó í ó ó ü í ó ó í ó í í ú ú ű ó í ú í űö ü Í ö Ö ü ö Ö ü ú ü ó ú ó

é é ó ó ó é ö é é é ó é é é é é é é é é é é é é ú ó é ó ö é é ó é ö é ó é éú é ú ó é é é é é é é é ö é é é ö é Ö é é ö ó é ö é é é é ű é ö ö ü é ö é Í

ő í Á ö í í í ű ö ö ö ö ö ő ű ö ö ú Ü í í ő ű ö ű ö Ú Ü ö Ü ö ú ü ö í ú ö ö ö í ö í ü ö ő ö ő ö ú ő í Ü Ü ő í Ü ú í ő ü í í í ű ű í ő ö í í ö ő í í ö

í ü ö ö í ö ü ö ö ő ö Ö ő ű í ö ű ö ü ő ú ő ő ő ő ú í ú ö ö ö ö í í ő í ü ű Ö í ö Ü Ű ü í í í ö í ő Ö Ü ü í ő ő ö ö ő í ö ö ü ü í í í í ü ű Ö Ö ü í ú

ő ő ú ő ó ó ú ő ő ó ő ó ó ú ú ú ü ó Ó ó ó ó ő ő ő ú ű ó ó ő ü ő ó óó ó ó

ó Ü ó ü ü ó í ö í ó í ö í ó ö ó ű ö ü í ó í ú ó ü í ö ö ö ö ó í í ö ü ö í ó ö ü ö í ó

Ü

ú Ü Í ú ú ú ú ú ú

ó É ó í ó ó í í ö í ó í ö ö ö ü ö ó ó ó ü ú ö ü ó ó ö ö ü ü ü ö ö ó ö í ó ű Ü ó í ú í ö í ö í Í ó ó í í ö ü ö ö í ö í ö ö ö ü ó í ö ö ó í ú ü ó ö

É Í Á Á É Ü Ó É É É É Í Ó Ó Ő Á Á É Á É É É É Á É É Á Á É É Á É Í

Í Í Í Ü Ó Ó Ö Á Ü Ü Ó Ü Ü Ó Ö Í É Ö

ö ő ő ü ü Ó ü ö ű Á ő ő ö ő Á Ó ű ö ü ő ő ű

ő ö ő ű ó ö ó ű Í Ö Ö Á Í Ó Ö Ü É Ö Ö Ö Á Á Ö É Á Ö

é ö é Ö é é ő í ó í é ő ö ú é ó é ő ü ü é ó ö é é ó é é ö é ő í é é ő é é ö é ű ö é í ó é é í ö í ó í ó é é ö ó í ó ó í ó é é ö ő í ó ó í ó ü é í ü

Ö Ö Ú Ó Ö ű Ő Ő ű ű Ü Ő Ó Ő

í ó ő í é ö ő é í ó é é ó é í é é í é í íí é é é í é ö é ő é ó ő ő é ö é Ö ü é ó ö ü ö ö é é é ő í ő í ő ö é ő ú é ö é é é í é é í é é ü é é ö é ó í é

í í É í ó ó É ö í ó í ó í ó ó í ó í í ó ó ó í ö ö ö ö í í í ó ó ö ó

É ö Ű ő ű ő ő ű ű

í Ó ó ó í ó ó ó ő í ó ó ó ó

Ö Ö Ö Ö Ö Á Ű É Ö Ö Ö

ö ö ó ú ö ö ú ü ó ö ö Í ö ö ö ü ó ö ö ú ú ö ü ó ü ó ü ö ú ü ó ü ö ó Á Á ö ü ú ó ö ü ü ö ó ü ü Á ü ö ü ö ü ö ö ö ü ö ú ö ö ö ü ú ö ú ö ű ú ú ü ö ó ö ö

ö ö ö ö ö ö ö ü ö ü ö ű ö ú ü ű ö ü Í ö ú ü ü ű ö ú ü Á ü

é ú é é é é é é é é é é é é ú é ö é é é ö Ő é é é ú é é é é é é é é ö é é é ö é Ö é é ö é ö é é é ű é ö ö é ö é é ö ö é é ö ö é ö é Ö é ú é é é é é é

ű ú Í Ó Á ú Ű ű Ő Ö Á ú Ű Ü ú ú Á ú ű

ő ö ő ú ő ö ö ő ó ő ö ü ú ö ö ó ő ö ü ó ó ó ó ő ő ő ó ó ú ő ü ő ö ö ó ü ö ö ő ű ö ö ő ú ú ó ö ő ű ö ó

É Í ü ú É ü ő ő ő ő ú ő ú ü ü ő ü ú ü ű ú ú ü ü Í ü ű ő ő É ő

ö ö Ö ó ó ö ó ó ó ü ö í ü ú ó ó í ö ö ö ó ö ü ú ó ü ö ü ö ö Ö ü ö ö Ö ó

ű í ú ü ü ü ü ü Ó í ü í í í É Á

ú ü ü ú Ö ú ü ü ü ü ü ú ü ú ü ű Í ü ü ű ü ű Ó ü Ü ű ú ú Á ü ű ű ü ü Ö ü ű ü Í ü ü

ó ú ú ü ú ő ó ő ő ó ó ó ö ó ü ő ó ő ö ü ü ó ö ő É ó ö ö ö ó ó ö ü ü ö ü ó ó ő ó ü ó ü ü ö ö É ú ó ó ö ú ö ü ü ó ó ó ü Á ö ö ü ó ö ó ö ö ö ö ó ó ö ó ó

Í Í Ó ű Ü Ó Ó Ü ü Ö Í Ü Í Í ú Ö Ó Í ú ú Ö Ó É Í ű ú

Ü ü Ü Ö Ó ö ü ö Ó Ú Ó ü Ó ö ö Á ö ö ö ö ü

ű ú ú Ö ó Ö ó ó ó Ö ű ó ű ű ü Á ó ó ó ó ü ó ü Ö ó ó ó Ö ű ű ü Ö ű Á ú ú ú ó ű í í Ő ú Á É Ö í ó ü ű í ó ű ó Ö ú Ő ú ó í ú ó

ö ü ü ú ó í ó ü ú ö ó ű ö ó ö í ó ö í ö ű ö ó Ú ú ö ü É ó í ö Ó Á í ó í í Ú ö ú ö ű ü ó

ü É ö É É ö ö ö ü ö ö Á ű ö ű ű ű Á Í ö ö Ó ö

ú ú ü ü Á ú ú ü ű ű ú ü ü ü ü

ö Ó ű ö ó í ó ü ö Ó ó í ö ö ó Ö ó ö í ó í ó Á í ó Á Á Ő ú ü ó Í ü ú ü

ő ő ő ő ő ő ú ő ü Á ü ü ő ő ő ő ő ő ő ő ő ő Ö Ó ő ő ő Ö ő ő ő

ü ö ú ö ú ü ö ü Á Ó ö ö ö ö ú ü ú ü ü ú ú ö ö ü ü ú ü ü ö ö ű ö ü ü ü ü ö ö

Í Ú É ő ő ú ö Ö ú ú ú ö ö ú ö ö ű ö ő ö ö ú ö ő ő ö ö ö ő ő ú ő ú ö ö ö ú ö ö ú ő ö ú ö ű ö ő Ó ő Á ö ő ö ö

ő ő ő ő ú É ü ú ú ű ú ű ő ő ő ő Á Á ü ő É É É É É É Á Ú Á Á ő ő ő ő ő É Á Á Á ő ő ő Á ü ő ő ü

É ő ő ű ú Á ő Á ő ű ő ő ő ő ő ő ő ő ű ú ű ű ő ő ő ű


ú ú ö ö ü ü ü ü ű ü ü

í ó í ó ó ó í í ü ú í ú ó ó ü ü í ó ü ú ó ü í í ü ü ü ó í ü í ü ü í ü ü í ó ó ó í ó í ü ó í Á

Ö ő ü Ö Ö Ő ü ő Ö Ö ü ű Á Í Ö ű ü ő ő ő Ö ü ü ő ő ő Ü ü ő ő ő ü ő ő ü ü

Ö Ö ű ű ű Ú Ú ű ű ű Ú ű

Í ö ö ű ú ö ö Í ö ü ö ü

Í Ó ü ü í ü ü ü í Í í É í í Í Í ü ü ü í Í ü

ú ű ú ú ű ú ű ű ú ű ú ű Á ű ű Á ű ű ú ú ú ú ú ú ű ú ú ú ú ú ú ú ú

Ö Ö ú

Ü ű ö Á Ü ü ö ö

ü ö ö ő ü ó ó ú ó

Ö Ö ö Ó Ó Ó Ó Ü ú ü Ű Ö Ö Ö ö Ü ö Í ü ű

í í í í ó í ó ö ö í ű ü ó ó ü ú Á Á ó ó ó ó ó ó í ó ö ö ü Ó ö ü í ö ó ö í í ö í ó ó í ö í ú ó ú í ö ú ö ö ö í ó ó ó ú ó ü ó ö í ó ó í í í Á í ó ó ó

É Ö Á Í Á Ó Ö ü

ő ő Ű ü ú ú Ú ü ű ő ő ő ő Á Á Í ü É ő ő ő ő ő É ő ú ú ú ő Á Ö ő

ú ű ű É ü ű ü ű ű í ü í ő í Ü ő ő ü ú Í ő ő í ú ü ü ő ü

ű ö ú ö ö ö ö í ű ö ö ö ű ö ö ö í ü ú í ű í ö í ú ű í ü ö ö ú ö í ö ű ú ü ö ö í ö ü ö ú ű ö ö ö í Á í ü í ö ü ö í ü ö Ő ü ö í ű ü ö í í í í í

ó ö í í ü Ű Ö ó ó ű ö ü Í í í ö Ö Ó ö Ű Ö ú ó ó í í ű ö ö ö ö í ó ö ö í ö ű ö ű ö ö ö ö ö í ó Ö Ö ü ú ö ó ü ö Ö ű ö Ö ü ó ö ö ó ö ö Ó í ű ö ű ö ö ű í

ű ú ü ü ü Í ü ö ü ö ü ö ü Ó ü ö ü ö ö ü ű ű ú ü ö ö ü Ó ö ű ü ö ú ö ö ü ü ű ü ü ö ö ü ü ú ö ö ü ü ú ü

ö ö ö Ö ö ú Ö í Ö ű ö í Ö í ö ü ö í ú Ö Ö ö í ű ö ö í ö ö Ő ö í ü ö ö í Ö ö ö í ö í Ő í ű ű í Ö Ó í ö ö ö ö Ö Ö ö í ü ö ö Ö í ü Ö ö í ö ö ö ö ö Ö ö í

ű Á ü ő ö í ö ö ő ő ő ő ö

í ü í ü ő ő ü Í ő ő ő ú í ő ő ö ö ö ű ü í ő ő í ú ö ö ú ő ő ú í ő í ő ö ö í ő ü ü í ő ö ü ü ú í í ü ő í ü Í í í í ö ő ö ü ő í ő ő ü ű ő ő í ő í í ő ő

ű ú ó ó ü í Á Á ú ó ó ó ó ó ó ó ó ó ó ó ó ó ó í ó ü É ű ü ó í ü í í í í í ó í ü í í ó ó Á

í í ü í í í í í Ó ő ő í í í Ú ü Ú í í Ú ő ü Ú ü ő

É ú É ö ö ű ö ö ö ú ú ú ű ű ú ö ű ö ű ű ü ö ö ü ű ö ü ö ö ö ö ú ü ö ö ö ú ö ö ú ö ö ú ü ú ú ú ű ü ö ö ű ú ű ű ü ö ű ö ö ö ű ú ö ö ü ú ü ö ö ö ü ú ö ű

ü ő ő ü ü ő ő ű í í ű ő ő ő ü ő ő í í ő ő ő ő ő ő ü ü í ő Ö ő ü í ő ü í í ő ü ő í ő ő í í ő ü ü í ő ü í ő í ő í ő ü í ő í ü í í ő

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

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

í ű ő ü ó í ó í Ö ü í ő ó ő í ű ű ú ű ű ű ú úí ő í ü íő í ü ő í í ű ű ő í ü ű ó ő í ű ú ű ő ó ő í

ó ó ó ö ü ő ö ó ú ő ó ö ó ó ő ü ő ó ő ü ö ő ő ó ó ő ó ö ö ú ó ő ö ó ő ő ó É ó ő ü ö ú ű ü ő ő ú ó ö ú ó ó ó ó ő ó ö ú Á ő ő ő Á ó ó ü É ö ú


ő ő ö ó ö ú ő ő ó ó ö ö ó ö ó ó ó ó ö ö í í ö í ő ő ó ó ó ö Á É ó Á ű ú ó ö ő ú ó ó ó ó ű ö ó ó ó ó í ő ú ö ő ő ö í ó ö ő ú ó ó ó ó ű ö í ó ö ú ú ó ó

Á í í í í í í í í í ű í í í í í í í í í í í í í ű í í í í í ű ű É É í ú

É Á ű ő ó ű ő ő ű ő ó ő ü ő ő ó ó ő ő ő ő ó ó ő Ö ő ő í ó ó ó ó ű ő í ó ő ó ó ű ő ó ó ó í ű í ű ő ü ő ő ó ő ő ű ű ó í ó ű ő ő ó ó ó ó ő ő ó ő ó

Í ö ö ó ü ü Ó ó ü ő í ö ö í ü ő ü ü ó ő ő ö ö í ö É í ö ö í Í í í ő É í ü ü í ő ö ö ű ü í ü ó í ö É ü í ü í ü ó ö í í ű í ő ü ü ó É ü ü ü ü ü ö ő ü ö

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

ő ő ö ő ó ö í ő ő ó Ó Ó ö ó ó ű ö ö ó ő ő ö ö Ó ó Ó Ó ó Ó ö Ó ü Ó ó Á ő

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

ö ű é é é é é ü é é ú É ü é é é ö ú ú é é é é é ű é ü ö é ű é é é é é ö éü ő é ú ö é é ű é ú é é ő é Á é ű é ö ű é é ú é é é é é é é é é é ö é é Á ö é

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

3o Környezetismeret felmérők

ű Ö ö ü Ö ö ú ú Ö ü ö ú ü ö ü ö ö ö ü ü ü ö ö ű ü ö ö ü ö ö ü

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

117. AA Megoldó Alfréd AA 117.

ó ő ü ú ú ó ó ü ú ú ő ő ó ó ü ó ú ü ő ó ü Ü ó ó ó ó ő ó ó ő ó ő ó ó ó ő ő ó ó ő ó ú ó ó ó Ú ő ó ő ó ő ó ő ő ó ő ő ó ó ő ő

ö ö ö ő ö ő ö ő ü ö ü ö ő ö ő ő ő ú ö ö

ő ű í ő ú í í Á ű í ő ő ő ő í É í í ő Ö Ö Ö Á Í Á ő ő ő ő É ő ő ú ú ú í ő Á Ö ő ő

ó ü Á Ú ü í Ó ó ö Ú ö ü Ó Ó ő Íó í ő ú ő í ó ö Ö ö ö í ó ó Í ü ő ó ó Ó Ó Ó í Ó Í Ú Ó Ó í í í Ó ő Ö ü Ó Ö ű Ö ű ö ü Ó ő ü Ö í Ö Í ó Ó ó ö ü ü ö ó Ö Ó Ó

ö Ö ő Í ó ő ö ú ó ó ő ü ü ü ö ü Ö ö ö ö ö ü ű ö ü ó ö ö ő ő ó ó ő ú ü Á

ő ű É Ó Ü É É É É Ü Ö É É É ű É Ö É Ü É Ú Ó ő Ó

í ű í í í ű ö ü ü ö ú ű ú ö ö í í í ű ö ü ü ö ö ö ö í í í ű ö ü ü ö ü ö í í í ű í ö í ö ö ű í ü ü ö í ö ö ö ü í í ű í ú ö ö ö ü ö ö ú ö ö ö ü ö ö ö ö

Í Á ő é é é é é ő é ő é ő é Í Á Ú Á Á é ő é ő é é é é é ű é é é é é é é é Á é é é é é ú ú é é é é é é é ú é é é é é é é é é é é ő é é é é é é é é ű é

ú ü ú ö ú í ü í ű ö ü ü ú ú ö ú ö íö í ú ü

Ú ú ö é ö é Ú ú ö ű ö ö ű ö é ö ö é í í Ö ö í í Á Á Ó é ű ü é é ü ú é ü é ű ü é

Á Ó É É Ú É ő í ő ő ö ő ö ő í ö ö ü í ő í ő ö ű ő í ü ü ő í ö ő ü ő ú ü í í ű ü ő ő ő í ö í ú ö ő ö ü ő ő ő É

Átírás:

Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1

Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2

Programtervezési szempontok Teljesítse a specifikációt. Legyen robosztus, extrém adatokra se szálljon el. Rugalmasan lehessen változtatni. A megírt részeket máshol is lehessen használni. Részek egymással tudjanak együttműködni. Legyen hatékony (futási idő, memória) Legyen hordozható. Könnyen lehessen használni. Forrás legyen könnyen érthető és jól dokumentált. Izsó Tamás Felhasználó által definiált adattípus/ 3

Funkcionális dekompozíció Olvassuk be és írjuk ki azoknak a diákoknak az adatait, akiknek a tanulmányi átlaga az összátlag felett van. (megvalósítás nélkül) Izsó Tamás Felhasználó által definiált adattípus/ 4

Funkcionális dekompozíció Olvassuk be és írjuk ki azoknak a diákoknak az adatait, akiknek a tanulmányi átlaga az összátlag felett van. (megvalósítás nélkül) első Kovács Ágnes Okos Tobiás Lusta Henrik Buli Józsi 4.5 4.8 2.1 3.0 next next next next Izsó Tamás Felhasználó által definiált adattípus/ 4

Funkcionális dekompozíció Olvassuk be és írjuk ki azoknak a diákoknak az adatait, akiknek a tanulmányi átlaga az összátlag felett van. (megvalósítás nélkül) első Kovács Ágnes Okos Tobiás Lusta Henrik Buli Józsi 4.5 4.8 2.1 3.0 next next next next Lanc elso ; double a ; elso = f i l e _ b e o l v a s a s ( " adat. t x t " ) ; a = a t l a g ( elso ) ; print_okosok ( elso, a t l a g ) ; Izsó Tamás Felhasználó által definiált adattípus/ 4

OO dekompozíció Szereplők: Izsó Tamás Felhasználó által definiált adattípus/ 5

OO dekompozíció Szereplők: Kovács Katalin 4.5 egy diák adata tankör Izsó Tamás Felhasználó által definiált adattípus/ 5

OO dekompozíció Szereplők: Kovács Katalin 4.5 egy diák adata tankör beolvas ( ) ; betesz ( ) ; k i i r ( ) ; kivesz ( ) ; g e t _ a t l a g ( ) ; elso_adat ( ) ; get_nev ( ) ; van_meg_adat ( ) ; kovetkezo_adat ( ) ; A megadott függvények képzik az adatok interfészét. Mi van az implementációval? Izsó Tamás Felhasználó által definiált adattípus/ 5

OO dekompozíció Szereplők: Kovács Katalin 4.5 egy diák adata tankör beolvas ( ) ; betesz ( ) ; k i i r ( ) ; kivesz ( ) ; g e t _ a t l a g ( ) ; elso_adat ( ) ; get_nev ( ) ; van_meg_adat ( ) ; kovetkezo_adat ( ) ; A megadott függvények képzik az adatok interfészét. Mi van az implementációval? Kivülről nem látszik. Diak_adat: struct vagy string Tankor: láncolt lista, fa, dinamikus vektor,... Izsó Tamás Felhasználó által definiált adattípus/ 5

Dátum típus létrehozása [3-7] struct Date { i n t y ; i n t m; i n t d ; ; Date x1 ; x1. y=2005; x1.m=3; x1. d=15; Izsó Tamás Felhasználó által definiált adattípus/ 6

Adatok konzisztenciájának biztosítása [20-25] Date x2 ; x2. y=2000; x2.m=2; x2. d= 29; / / Ki t u d j a van e i l y e n ; x2.m=15; / / Huh!! void i n i t _ d a t e ( Date& date, i n t year, i n t month, i n t day ) { i f (! is_date ( year, month, day ) ) { throw " Hibas datum " ; dd. y=year ; dd.m=month ; dd. d=day ; Izsó Tamás Felhasználó által definiált adattípus/ 7

Hibás számítások elkerülése [27-44] Date holnap ( Date ma ) { Date holnap ; holnap. y = ma. y ; holnap.m = ma.m; / / valóban? holnap. d = ma. d+1; / / Huh!! return holnap ; Hozzunk létre egy jó működő add_day() függvényt. Date next_day ( Date ma ) { Date holnap=ma; add_day ( holnap, 1 ) ; return holnap ; Izsó Tamás Felhasználó által definiált adattípus/ 8

Egységbe zárás [46-60] struct Date { i n t y ; i n t m; i n t d ; Date ( i n t year, i n t month, i n t day ) { / / e l l e n ő r z i az adatokat... ; void add_day ( i n t number_of_day ) {... ; Használat: Date ma(2013,02, 26 ) ; Date holnap = ma; / / Van i l y e n? holnap. add_day ( 1 ) ; Izsó Tamás Felhasználó által definiált adattípus/ 9

Adattagok elrejtése [64-78] ma.m=13; / / huh!! struct Date { private : i n t y ; i n t m; i n t d ; public : Date ( i n t year, i n t month, i n t day ) ; / / e l l e n ő r z i az adatokat void add_day ( i n t number_of_day ) ; i n t year_of_date ( ) { return y ; i n t month_of_date ( ) { return m; i n t day_of_date ( ) { return d ; ; Date dd (2013,2,26); i n t ev = dd. y ; / / HIBA!! p r i v a t e i n t ev = dd. year_of_date ( ) ; / / Igy már j ó Mekkora a getter függvények overhead-je? Izsó Tamás Felhasználó által definiált adattípus/ 10

struct vs. class [80-90] struct A{ ; class A{ public : ; class A{ ; struct A{ private : ; Viselkedéssel nem rendelkező típusnál struct-ot szokás használni. Izsó Tamás Felhasználó által definiált adattípus/ 11

Hónap és nap felcserélésének kivédése [94-110] Hogyan vesszük észre ha Date dd(2013,2,3); helyett Date dd(2013,3,2); írunk? class Date { public : enum Month { jan =1, feb, mar, apr, may, jun, j u l, aug, sep, oct, nov, dec ; Date ( i n t year, Month month, i n t day ) ; / / e l l e n ő r z i az adatokat void add_day ( i n t d ) ; i n t year_of_date ( ) { return y ; Month month_of_date ( ) { return m; i n t day_of_date ( ) { return d ; private : i n t y ; Month m; i n t d ; ; Izsó Tamás Felhasználó által definiált adattípus/ 12

enum használata [111-121] Date : : Month m = Date : : dec ; i n t x = m; / / OK FONTOS m = 10; / / Hiba! m = Date : : Month ( 1 0 ) ; / / OK Date ma( 2013, Date : : feb, 26 ) ; / / OK / / Rossz paraméter sorrend. Date ma( 2013, 26, Date : : feb ) ; / / F o r d í t á s i hiba / / Újabb problémák const holnap (2013, Date : : feb, 27 ) ; i n t ev=holnap. year_of_date ( ) ; / / Hiba mert nem konstans függvény Date szabadnapok [ 3 0 ] ; / / Hiba nincs paraméter n é l k ü l i c t o r Izsó Tamás Felhasználó által definiált adattípus/ 13

Újabb gondok kiküszöbölése [124-145] class Date { public : enum Month { jan =1, feb, mar, apr, may, jun, j u l, aug, sep, oct, nov, dec ; class I n v a l i d { ; / / throw hoz Date ( i n t year, Month month, i n t day ) ; Date ( ) ; / / a l a p é r t e l m e z e t t k o n s t r u k t o r void add_day ( i n t number_of_day ) ; i n t year_of_date ( ) const { return y ; Month month_of_date ( ) const { return m; i n t day_of_date ( ) const { return d ; private : i n t y ; Month m; i n t d ; ; Izsó Tamás Felhasználó által definiált adattípus/ 14

Tagfüggvények definiálása osztályon kívül [148-175] Date : : Date ( ) { s t a t i c const Date dd (2001, Date : : jan, 1 ) ; y=dd. y ; m = dd.m; d = dd. d ; Date : : Date ( i n t y, Date : : Month month, i n t day ) { i f (! is_date ( y, month, day ) ) throw I n v a l i d ( ) ; this >y = y ; / / Paraméter és t a g v á l t o z ó megkülönböztetése m = month ; d = day ; void Date : : add_day ( i n t number_of_day ) { i f ( number_of_day <0) throw I n v a l i d ( ) ; while ( days_in_month ( y,m) < number_of_day+d ) { number_of_day = days_in_month ( y,m) ; i f ( m == dec ) { m=jan ; y ++; else m = Month (m+ 1 ) ; d += number_of_day ; Izsó Tamás Felhasználó által definiált adattípus/ 15

Segédfüggvények [175-200] bool leapyear ( i n t year ) { i f ( year%4) return false ; i f ( year%100==0 && year%400) return false ; return true ; i n t days_in_month ( i n t year, Date : : Month month ) { switch ( month ) { case Date : : feb : / / Februári napok változnak return ( leapyear ( year ) )? 2 9 : 2 8 ; case Date : : apr : case Date : : jun : case Date : : sep : case Date : : nov : return 30; default : return 31; bool is_date ( i n t year, Date : : Month month, i n t day ) { / / Évet nem l e h e t r o s s z u l megadni i f ( day <=0) return false ; / / day mindig p o z i t í v i f ( days_in_month ( year, month) <day ) return false ; return true ; Izsó Tamás Felhasználó által definiált adattípus/ 16

Kiíratás és beolvasás [202-220] ostream& operator <<( ostream& os, const Date& d ) { return os << ( << d. year_of_date ( ) <<, << d. month_of_date ( ) <<, << d. day_of_date ( ) << ) ; istream& operator >>( istream& is, Date& dd ) { i n t y, m, d ; char ch1, ch2, ch3, ch4 ; i s >> ch1 >> y >> ch2 >> m >> ch3 >> d >> ch4 ; i f (! i s ) return i s ; i f ( ch1!= ( ch2!=, ch3!=, ch4!= ) ) { / / oops : format e r r o r i s. c l e a r ( ios_base : : f a i l b i t ) ; / / set the f a i l b i t return i s ; dd = Date ( y, Date : : Month (m), d ) ; / / update dd return i s ; Izsó Tamás Felhasználó által definiált adattípus/ 17

Osztály interfész kialakításának a szempontjai Legyen teljes, minden szükséges szolgáltatást biztosítson. Legyen minimális. Ami az adatok realizációjától független, az inkább legyen külső függvény. Inicializálja az objektumot. Támogassa a másolást (következő óra). A függvények argumentum típusa olyan legyen, hogy azt jól lehessen ellenőrizni. Az interfész szolgálja ki a konstans objektumokat is. Szabadítson fel minden lefoglalt erőforrást. Izsó Tamás Felhasználó által definiált adattípus/ 18