1 Språket C++
1.1 Valet av språket C++ för kompendiet
Språket C++ är ett språk som utvecklats för storskalig objektorienterad utveckling av
sofistikerade och komplexa system. Det ligger då i sakens natur språket har flera vinklar och vrår som inte kommer att vara viktiga under studier av grundläggande programmering, men som än dock kommer att påverka den praktiska programmeringen.
Det kommer att dyka upp flera exempel på saker som inte har någon naturlig förklaring bland den del av språket som texten behandlar, saker som då kan kännas obekväma eller onödiga. Men tanken är att en stor andel av er som använder detta kompendium kommer att fortsätta studera programmering i C++. C++ är ett av de mest omfattande programmeringsspråk som finns, men det är samtidigt förmodligen det mest uttrycksfulla språk, trots det är den del som berörs i denna text i all väsentlighet snarlik de flesta andra datorspråk.
1.2 Språket
C++ är en blandning av ett objektorienterat språk och ett strukturerat språk, en sk hybrid, och har troligtvis en större marknadsandel av komersiella applikationer än något annat språk. C++ är ett relativt nytt språk, standardiseringen gjordes sent 1998. Språket har tidigare funnits i olika former och dialekter sedan tidigt 80tal.
Bjarne Strostrup är den ursprunglige konstruktören (eller uppfinnaren) av C++. Han har skrivit flera böcker som i det närmaste erhållit bibelstatus bland C++ programmerare, bla "The C++
programming language", AddisonWesley.
1.3 Att programmera
För att kunna programmera behöver du en dator (duh?) och en utvecklingsmiljö (en kompilator och en textredigerare). För kompendiet har valts Microsoft Visual Studio 2008 som testmiljö eftersom den används på Mittuniversitetet och är dessutom en vanlig professionell miljö för programvaruutvecklning på PC. För eget bruk finns Visual Studio Express som är gratis på Mircosoft’s hemsida. Ett annat alternativ är ett gratispaket som heter DJGPP som finns att hämta på nätet http://www.delorie.com/djgpp/. Det finns dessutom en grafisk gratismiljö som heter DevC++ som finns på http://www.bloodshed.net/devcpp.html.
1.4 Hello World
Då man först introduceras till ett nytt programspråk eller en ny programmeringsmiljö bör man först se till att man behärskar proceduren att skapa ett körbart program. Det sker väldigt ofta med Hello World. Syftet med Hello World programmet är att se hur allting fungerar då man ska skapa ett program.
1.4.1 Börja programmera
För att komma igång att programmera börja med att starta programmet VS och följ bilderna nedan för att skapa ett projekt. I denna kurs kommer vi uteslutande att skapa textbaserade program i projekt av typen Win32 Console Application.
Nu är det dags att mata in programmet.
I det nya textfönstret som dykt upp (editorn) kan vi nu mata in följande, eller ett liknande program från boken
#include<iostream>
using namespace std;
int main() {
cout<<"Hello World"<<endl;
return 0;
}
Programmet körs genom att i VS välja menyn Debug/Start without Debugging …här ges en statusrapport av miljön som beskriver hur den arbetar med att bygga programmet Hello World.
I VS ser det ut som
Configuration: HelloWorld Win32 Debug
Compiling...
main.cpp Linking...
HelloWorld.exe 0 error(s), 0 warning(s)
Om du inte får 0 fel och 0 varningar har du med all sannolikhet matat in programmet fel, gå då tillbaka till inmatningen och kontrollera att du matat in varje tecken, bokstav som specialtecken på exakt rätt sätt.
Ögonblicket efter du ser rapporten att allt går bra startas ditt program. I VS ser du då ett konsolfönster med texten
Hello World
Press any key to continue
I andra miljöer är det ofta så att programmet körs utan att man får uppmaningen att trycka på en knapp för att fortsätta. Då kan det hända att det ingenting syns, eller att det blinkar till, på skärmen. Det som då hänt är att programmet körts och avslutats innan man han se resultatet. Det är oftast helt normalt.
Du har nu skapat ditt första körbara C++ program. Hur programmet fungerar gås igenom i detalj längre fram.
1.5 Att skapa ett program, kompilering och länkning
Det som du skrev in i utvecklingsmiljöns editor var C++ källkod, dvs. programrader med C++
satser. Datorn förstår inte dessa satser naturligt utan måste först översätta dem till ett för datorn förståeligt språk, s.k. objektkod. Den objektkod som skapas måste därefter sättas ihop till ett körbart program. Dessa procedurer kallas kompilering respektive länkning.
1.5.1 Kompilering
När ett program kompileras kontrolleras först att dess syntax är riktig. Det innebär att kompilatorn ser till att de programrader som är skrivna i källkoden följer de regler som finns för språket C++.
Ungefär på samma sätt som en modern ordbehandlare kan kontrollera stavning, avstavning och andra språkregler.
Då felkontrollsproceduren är avklarad (den sker egentligen i flera steg) börjar översättningen till objektkod. Resultatet av översättningen är vanligvis en fil som i vårt exempel heter
HelloWorld.obj eller något liknande. I den filen finns lösryckta fragment av för datorn förståelig programkod. Dessa måste nu sättas ihop för att kunna köras som ett program. Det görs av länkaren.
1.5.2 Länkning
När objektfilerna skapats tar länkaren vid för att skapa ett körbart program. Det gör den genom att foga ihop det skrivna programmet med andra befintliga objektfiler s.k. biblioteksfiler. Bland annat kommer vårt Hello World programs objektfil att kopplas ihop med funktioner för att skriva ut text på skärmen. Resultatet av länkningen läggs i exemplet i en fil med namnet HelloWorld.exe som är ett helt vanligt Windowsprogram1.
Man kan i alla miljöer göra en kompilering utan att göra en länkning med ett compile kommando, hur detta görs varierar från miljö till miljö. Man kan dessutom utföra en länkning utan att behöva köra programmet med ett build kommando. Syftet med dessa kommandon är vanligtvis att kontrollera eventuella fel.
1.6 main()
1.6.1 Hello World programmet rad för rad
Ett C++ program läses och körs som regel uppifrån och ned. Datorn tar den första C++ satsen den stöter på, tolkar och utvärderar resultatet, och utför därefter nästa sats. Hello World programmet har faktiskt bara en enda programsats som datorn ska utföra. Det övriga i källkoden är till för att kompilering och länkning ska fungera.
Rad 1: #include<iostream>
Rad 2: using namespace std;
Dessa två rader hör ihop rad ett säger att vi ska använda oss av en fil döpt "iostream". Filen iostream är en s.k. headerfil som innehåller fördefinierade funktioner, exempelvis att skriva text till skärmen. Rad två säger att dessa funktioner tillhör C++ standarden. Namnet std i using namespace std; är till för att undvika hopblandning med äldre varianter av C++, dvs. C++ innan standardiseringen.
Rad 4: int main() Rad 5: {
Rad 4 anger programstart. Detta är en överenskommelse som finns till länkaren att man anger programmets start på detta sätt. Raden är en "definition av en funktion döpt main()". En funktion är en samling programsatser som kan utföras som en enhet. Rad 5 anger att här börjar
programsatserna för main funktionen. Varje { tecken i ett C++ program har ett motsvarande } tecken. Dessa klamrar grupperas på samma sätt som parenteser i räkneuttryck.
1 I vissa sammanhang ser man benämningen DOSprogram. Den benämningen är i de allra flesta fall helt felaktig
Rad 6: cout<<"Hello World"<<endl;
Detta är den enda programsats som finns i programmet. Det är programsatserna som körs och uträttar något konkret i ett program. Man känner igen en sats genom att den avslutas med ett semikolon ;. Denna sats innehåller 4 olika delar
1. cout – läses seaout, bokstäverna står för "Console OUT", där console är just det vi kallar för konsolfönstret och out anger output eller utmatning.
2. << kallas utströmsoperator och används för att skicka det som står till höger om operatorn till det som står till vänster. Symbolen dyker upp i olika sammanhang men anger alltid att den information som står till höger skall skickas till enheten (eller strömmen) som står till vänster.
3. "Hello World" – textsträngar anges i C++ som text omgiven av "
tecken.
4. endl – läses ut som endline, är ett namn för ett specialtecken som anger att en radmatning ska skrivas i textfönstret.
Semikolon avslutar satsen. Hela satsen kan alltså läsas ut som: Skicka texten "Hello World" till cout. Skicka sen ett radmatningstecken till cout.
Satsen return 0; är en sats som avslutar programmet. Nollan är vårt sätt att berätta för den process som startar programmet (i det här fallet operativsystemet) att allt gått bra.
Den sista raden } anger slutet på main funktionen och därför slutet på programmet. I de första program vi kommer att skriva skall alla programsatser skrivas innanför mainfunktionens { och } klamrar för att fungera. För att testa lösryckta programavsnitt skrivna i texten kan man foga in dessa mellan klamrarna och kör programmet på nytt.