previous next Up Title Contents Index

22.6 enum


Tyypissä Vertailu_oper_tyyppi "luotiin" luettelo vakioita, joille ei kuitenkaan tarvinnut itse antaa arvoa. Sama olisi voitu tehdä myös vakioilla tai #defineillä:
	// Vakioilla                            // #definellä
	const YHT     = 0;                      #define YHT      0
	const ERIS    = 1;                      #define ERIS     1
	const PIEN    = 2;                      #define PIEN     2
	const PIENYHT = 3;                      #define PIENYHT  3
	const SUUR    = 4;                      #define SUUR     4 
	const SUURYHT = 5;                      #define SUURYHT  5 

Oman tyypin Vertailu_oper_tyyppi luomisella on kuitenkin se etu, että voidaan tehdä myös muuttuja joka on samaa tyyppiä. Tällaiseen muuttujaan ei voi sijoittaa muita arvoja (vaikka muuttuja olisikin todellisuudessa tyyppiä int). Lisäksi useat debuggerit näyttävät luettelotyyppisen muuttujan arvon nimellä eikä mitään sanomattomalla kokonaisluvulla.

Hyvässä ohjelmassa on jokaista selvästi eri luettelomaista tyyppiä kohti tehty oma luettelo ja käytetään vain ko. luettelotyypin tyyppisiä muuttujia. Esimerkiksi aliohjelmien virhepalautukset voisivat olla luettelotyyppiä. Valitettavasti luettelotyypin arvon tulostaminen tulostaa vain kokonaisluvun. Usein tulostuksia varten joudutaan tyypin rinnalle tekemään vähän EHDOT- taulukon kaltainen taulukko, jolla tyyppejä voidaan muuttaa selväkielisiksi ja päinvastoin.

Tehtävä 22.184 Viikonpäivät

Esitä sekä #define että enum avulla miten symboleille Su, Ma, Ti... saataisiin arvot 0,1,2...

Tehtävä 22.185 Pelikortit

Esitä sekä #define että enum avulla miten symboleille Pata, Hertta, Risti ja Ruutu saataisiin arvot 0,1,2,3. Määrittele sitten cKortti- luokka, jossa on kortin maa ja arvo. Määrittele vielä luokka cKorttipakka, jossa on 52 korttia jotka ovat tyyppiä cKortti.


previous next Up Title Contents Index