Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

7.3.5 Tulostuslause

	  printf("Hello world!\n")

printf("?") tulostaa ajonaikana sen tekstin, joka on lainausmerkkien välissä. Myöhemmin opimme, että funktion kutsussa voi olla myös useampia parametrejä ja voidaan käyttää myös muuttujia.

\n on C:n erikoismerkki, joka kääntyy merkkijonon sisällä käyttöjärjestelmän rivinvaihtomerkiksi. Tällaisen esiintyminen merkkijonossa aiheuttaa tulostuksen siirtymisen uuden rivin alkuun. Muista käyttää!

	cout << "Hello world!" << endl;

cout on C++:n yksi tulostustietovirtaluokan ( output stream class) ostream esiintymä, eli olio jolle ( coutin tapauksessa) siirretyt merkit tulostuvat näyttöön ( Console OUTput ) .

<< on operaattori, jolla C++:ssa on useita merkityksiä. Tässä tapauksessa kun operaattorin vasempana operandina on tietovirtaolio, on kyseessä tietovirtaan siirtämisoperattoori ( inserter). Käytämme tästä jatkossa nimitystä tulostusoperaattori. Koska operaattorikin on vain aliohjelma, voisi <<- operaattorin varsinainen kutsumuoto olla esimerkiksi

	operator<<(cout, "Hello world!");
	operator<<(cout, endl);

Koska operaattori palauttaa cout- olion, voidaan kutsu kirjoittaa myös (samoin kuin 1+2 palauttaa kokonaisluvun) ketjumuotoon

	operator<<( operator<<(cout, "Hello world!"), endl);
	// lyhennetty muoto
	(cout << "Hello world!") << endl;

joka ilman sulkuja on ohjelmassa hello.cpp esitetty muoto. Operaattorin muoto voi olla myös:

	cout.operator<<("Hello world!");
	cout.operator<<(endl);
	// josta ketjutettuna:
	(cout.operator<<("Hello world!")).operator<<(endl);
	// lyhennetty muoto:
	(cout << "Hello world!") << endl;

Vertaa vastaavaan ketjuttamiseen + - operaattorin kanssa:

	int i,j;
	i = 1 + 2;  j = i + 4;
	// voidaan kirjoittaa myös:
	j =  ( 1 + 2 ) + 4;

endl on tietovirran muotoilija ( manipulator), joka vaihtaa tulostuksen uudelle riville ja tyhjentää tulostuspuskurin. Rivinvaihto voitaisiin tehdä myös jonolla "\n", mutta tulostuspuskuri on muistettava myös tyhjentää. endl olisi hyvä olla vähintään viimeisessä tulostettavassa lauseessa ennen pysähtymistä. Joissakin koneissa ohjelmat voivat toimia myös ilman endl:ää, mutta jos halutaan standardin mukaista koodia, joka toimii KAIKISSA koneissa, on sitä syytä käyttää.

Kumpiko tulostuslause sitten on parempi? Jos kirjoitetaan C- koodia, on tietysti käytettävä printf:ää, mutta C++:n tapauksessa molemmat käyvät. cout on parempi sen vuoksi, että siihen liittyvään tulostusoperaattorin voidaan lisätä uusia tietotyyppejä tulostettavaksi (kuormittaa, operator overloading). Toisaalta tulostuksen muotoilu on helpompaa printf:n kanssa. Määrityksissä sanotaan että molempia voi käyttää, muttei samalla tulostusrivillä. Laajennettavuuden takia valitaan coutaina kuin se vain on mahdollista.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys