Innføring i programmering med C++/CLI

Beskrivelse: Beskrivelse: Beskrivelse: Beskrivelse: Beskrivelse: Beskrivelse: Beskrivelse: Beskrivelse: Beskrivelse: M:\html\Innføring CPP\

Om C++

Programmeringsspråket C ble utviklet i begynnelsen av 1970 årene.

C++ kom i 1979 og var en videreutvikling av C.

 

Visual C++ ble utviklet i begynnelsen av 1990 årene og var Microsofts implementasjon av C++.

Visual C++ er et visuelt programmeringsspråk. Det vil si at utviklere kan bruke grafiske verktøy

til å lage programmer som har et grafisk brukergrensesnitt (GUI = Graphical User Interface).

 

Vi skal i det følgende se på det som var nytt i C++ i forhold til C.

 

Om klasser i C++

Den viktigste forskjellen på C og C++ er at man i C++ kan bruke klasser og objekter.

C++ er et objektorientert språk, noe som C ikke var.

 

Å opprette objekter fra en klasse kan gjøres på tre forskjellige måter i C++.

 

1.     Statisk deklarasjon.

2.     Dynamisk allokering i det frie minnet.

3.     Allokering i managed heap.

 

Vi skal se nærmere på disse tre måtene å opprette objekter på.

1. Statisk deklarasjon

Statisk deklarasjon er den eldste måten å opprette objekter på.

Følgende gir et eksempel på å opprette et objekt ved statisk deklarasjon.

 

 

class Minklasse {

 

     public::int tall;

};

 

void minFunksjon()

{

     Minklasse mittObj; 

     // Statisk deklarasjon som oppretter et objekt fra klassen Minklasse.

 

     mittObj.tall = 2;

     // Skal vi referere til en variabel i objektet gjøres dette

     // ved hjelp av punktum.

}

 

 

Objektet mittObj vil slettes fra minnet når metoden (blokken) som

inneholder deklarasjonen er ferdig utført og slettes fra minnet.

2. Dynamisk allokering

Ved dynamisk allokering oppretter man objekter i det frie minnet ved hjelp av nøkkelordet new.

Disse objektene blir i det frie minnet til de slettes med delete eller til programmet avsluttes.

Ved dynamisk allokering får derfor programmerere bedre anledning til selv å kunne bestemme

når objekter i programmet skal opprettes og slettes, enn ved statisk deklarasjon.

 

Eksempel på å opprette et objekt ved dynamisk allokering.

 

 

class Minklasse {

 

     public::int tall;

};

 

void minFunksjon()

{

     Minklasse *pObj = new Minklasse();

     // Dynamisk deklarasjon som oppretter et objekt i det frie minnet.

     // En peker benyttes til å referere til objektet.

 

     pObj->tall = 5;

     // Skal vi referere til en variabel i objektet gjøres dette med ->

 

     delete pObj;     

    // Objektet blir i minnet til det slettes med delete

    // eller til programmet avsluttes.

}

 

3. Allokering i Managed Heap

I CLR som kom med .NET, har det blitt enklere å behandle objekter, da vi ikke behøver

å fjerne dem selv med delete. I CLR er det Garbage Collector som tar seg av å opprette

og fjerne objekter i Managed Heap.

 

·         Garbage collector vil automatisk fjerne et objekt fra minnet

når det ikke lengre er bruk for det.

 

Managed Heap (reservert minne) er minne som blir avsatt til en prosess

når prosessen opprettes.

 

Følgende gir et eksempel på å opprette et objekt i Managed Heap.

 

 

ref class Minklasse {   // Klassen må deklareres som en referanse klasse

 

     public::int tall;

};

 

void minFunksjon()

{

Minklasse^ mpObj = gcnew Minklasse();

// Objekter opprettes i Managed Heap ved nøkkelordet gcnew.

// En Managed Pointer benyttes til å referere til objektet.

 

mpObj->tall = 5;

// Objektet mpObj peker til fjernes av Garbage Collector

// når det ikke lenger er bruk for det.

}

 

 

Pekeren mpObj over kalles for en Managed Pointer.

En Managed Pointer deklareres ved å benytte tegnet ^.

 

Programeksempel som viser bruk av en klasse i C++

 

Referanser

Nytt med C++ var referanser. I C var det pekere, men ikke referanser.

Referanser kan i mange sammenhenger benyttes istedenfor pekere.

 

Referanser skal bestandig referere til noe. Dette gjør referanser sikrere enn pekere.

Pekere kan deklareres uten å peke til noe. Det kan føre til merkelige feil i programmer

om man begynner å bruke en peker som ikke er satt til å peke til noe, fordi en ikke

initialisert peker har en tilfeldig adresse og kan derfor forandre på data hvor som helst

i minnet.

 

·         Referanser gir en penere og mer oversiktlig kode enn pekere.

 

Ved deklarasjon av en referanse i C++ benyttes tegnet &.

Følgende gir et eksempel på deklarasjon av en referanse.

 

 

int main()

{

      int tall=0;          

// tall er en vanlig integer variabel.

 

      int& refTall = tall;   

// refTall er nå en referanse til variabelen tall.

 

      // Vi kan nå bruke variabelen tall via referansen refTall.

 

      refTall = 4;

           

      // Variabelen tall vil nå inneholde verdien 4.

}

 

 

Ved parameteroverføring i metoder kan referanser med fordel benyttes istedenfor pekere.

 

Programeksempel på bruk av referanse som parameter i en funksjon

 

Mer om referanser i hjelpesystemet

 

Deklarasjoner inne i for-løkker

 

Deklarasjoner inne i for-løkker var noe som kom med C++.

I C++ kan man skrive følgende

 

for (int i=0; i<10; i++)

{

    // kode som skal utføres

}

 

Her er integeren i deklarert inne i for-løkken.

 

 

Nye nøkkelord

 

Med C++ kom det noen nye nøkkelord som ikke var i C.

 

cout

Benyttes til utskrift av tekst og tall til skjermen.

Har samme funksjon som Console::WriteLine

cin

Benyttes til å lese inn tekst og tall som bruker har skrevet på skjermen.

Har samme funksjon som Console::ReadLine

inline

Unngår funksjonskall ved at små funksjoner ikke behandles som funksjoner ved kompilering.

Innholdet i en inline funksjon blir ved kompilering satt inn i koden der funksjonen kalles.

Dette gir større exe-filer, men får programmer til å kjøre raskere.

 

 

Link til eksempel med cin og cout i hjelpesystemet

 

Link til inline i hjelpesystemet

 


Einar Krogh

Sist endret: 12. desember 2015