CD5250 - Objektorienterad programutveckling med C++, 5p

Introduktion till streambaserad I/O


I inmatnings och utmatnings biblioteket finns ett antal fördefinierade streamobjekt, bland annat cout (common output) som är ett objekt ur klassen ostream vilket används för standard utmatning till bildskärmen.

Tillståndet hos ett utmatnings streamobjekt (som t.ex. cout) avgör hur utskriften kommer att formateras. Ett streamobjekt har ett antal instansvariabler som håller reda på dess tillstånd (formatflaggor). Tillståndet hos ett streamobjekt kan förändras genom att man skickar meddelanden till det eller då det svarar på en speciell sorts objekt kallade manipulatorer.

Här följer en lista av de metoder och motsvarande manipulatorer som kan användas för att förändra tillståndet hos en stream:

Manipulatorerna är definierade i manipulatorbiblioteket .

Fält vidd

Man kan positionera utskriften av ett tal eller en sträng genom att specificera vidden på utskriftsfältet.

Genom att anropa medlemsmetoden width() så ändras utskriftfältets vidd för nästa utskrift.

Alternativt kan man skicka manipulatorn setw() till streamen: I båda fallen så genereras följande utskrift där trean är högerjusterad och föregås av sju blankslag (eller annan specificerat utfyllnadstecken) samt där texten "Hello" följer direkt efter. Observera att man endast ändrat fältvidden för nästa objekt som skrivs ut (det är därför texten "Hello" inte inleds med blansslag. Den defaulta fältvidden är noll.

Justering

När man specificerar en fältvidd som ovan är den defaulta justeringen högerjustering, detta kan förändras genom att slå på någon av justeringsflaggorna samtidigt som alla andra justeringsflaggor slås av (om flera justeringsflaggor är påslagna samtidigt är beteendet obestämt). Exempel (medlemsmetoder) Exempel (manipulatorer) I båda fallen så genereras en utskrift där trean är vänsterjusterad och efterföljs av sju utfyllnadstecken (default blankslag) samt där texten följer direkt efter och också den efterföljs av tre utfyllnadstecken: Förändringen av justeringsflaggorna hos ett streamobjekt är permanent och gäller till nästa ändring, för att slå av en justeringsflagga kan medlemsmetoden unsetf() eller manipulatorn unsetiosflags() användas.

Utfyllnadstecken

När utskriftsfältvidden har satts så beböver man fylla ut eventuella tomrum med något tecken, default så görs detta med blanktecken men kan ändras till vilket tecken som helst med metoden fill(9 eller manipulatorn setfill().

Exempel med medlemsmetoder:

Samma exempel med manipulatorer: I båda fallen så genereras en utskrift där talet och texten är vänsterjusterade och utfyllda med utfyllnadstecken:

Flyttalsutskrift

Det finns tre format att skriva ut flyttal på: Med följande flyttalsformatsflaggor kan man styra formateringen av flyttal vid utskriften: Flaggorna slås på och av som vanligt med medlemsmetoderna setf() och unsetf() samt manipulatorerna setiosflags() och unsetiosflags(). Antalet decimaler i ett flyttal kan styras med medlemsmetoden precision() eller manipulatorn precision(), vill man även att avslutande nollor i ett decimaltal skall skrivas ut måste flaggan sättas.

Med medlemnsmetoder:

Eller med manipulatorer: Utskrift:

Heltalsutskrift

Default så skrivs heltal ut på decimal form (basen 10) men kan förändras till oktal (basen 8) eller hexadecimal (basen 16). Detta kan göras med manipulatorerna dec, oct och hex. Desutom kan man genom att sätta flaggan ios::showbase få oktala och decimala tal att skrivas ut på C vis: Följande utskrift genereras:

Versaler och gemener i numerisk utskrift

Genom att sätta flaggan ios::uppercase (default avslagen) kan man erhålla stora A-F och X i hexadecimala utskrifter istället för a-b och x samt E i flyttalsutskrifter istället för e.