• No results found

Att konstruera objekt

N/A
N/A
Protected

Academic year: 2021

Share "Att konstruera objekt"

Copied!
12
0
0

Loading.... (view fulltext now)

Full text

(1)

Att konstruera objekt

(2)

Konstruktorer

• När ett objekt instansieras anropas dess konstruktor

• Konstruktorn saknar returtyp

class A { public:

A(int x) {member = x;}

private:

int member;

}

(3)

• Konstruktorn utan argument kallas default-konstruktor.

• Även vanliga datatyper kan skapas så int x = int();

• Om man inte har skrivit någon konstruktor genereras kod för defaultkonstruktorn ändå

class A {

int member;

}

int foo() { A a;

}

(4)

• Konstruktorer kan överlagras

struct A {

A() {member = 0;}

A(int x) {member = x;}

• Man kan ange defaultparametrar

struct A {

A(int x = 0) {member = x;}

(5)

Initiering

• En konstruktors primära uppgift är att initiera medlemsvariabler

• Istället för tilldelning bör man använda initieringslistan

struct A {

A(int x) : member(x) {}

private:

int member;

}

(6)

• Vissa typer kan inte tilldelas, bara initieras struct A {

int & nr;

Big big;

A(int x) :nr(x), big(nr) {}

• Tilldelning är onödigt arbete om objektet istället kan initieras till rätt värde

• Tumregel, initiera alla medlemmar till 0

(7)

this-pekaren

• I en medlemsfunktion kan man komma åt objektet genom att använda den för-

definierade pekaren this

A & A::foo(A * neighbour) { if (this == neighbour)

cout << ”There is something strange in the neighbourhood”;

return *this;

}

(8)

Implicit konstruktor

• En implicit konstruktor tillhandahålls av kompilatorn ”vid behov” och kör

konstruktorn på alla objekt i klassen’

Vector v =alla_pensioner();

v = 3;

• Konstruktorer som tar ett argument kanske ska deklareras explicit. Tänk efter!

(9)

Konstruktionsordning

• Medlemmarna initieras i den ordning de är deklarerade.

struct A {

int weight;

int size;

A(int x) : size(foo(x)), weight(size)

{}

(10)

Destruktor

• En destruktor körs när ett objekt förstörs

– När en lokal variabel blir ”out of scope”

– Om man anropar delete på en pekare till objektet

– Om man anropar destruktorn direkt ~A()

• Låt destruktorn ta bort dynamiskt allokerat minne

~A() { delete minne; }

(11)

Privata konstruktorer

• Genom att deklarera konstruktorn privat kan man förhindra konstruktion utifrån.

• Istället kan man låta en metod konstruera instanser (factory)

• Man kan även låta destruktorn vara privat då förhindras allokering på stacken.

(12)

Sammanfattning

• Hur fungerar konstruktion och destruktion;

på stacken, på heapen, ordningsföljd

• Ni måste veta vad initieringslistan är och när man måste använda den

• Ni måste veta vad en implicit konstruktor är och hur och när man bör göra den

explicit

References

Related documents

Även om många mer eller mindre har det naturligt när de sjunger tror jag det är viktigt att uppmärksamma och träna detta med körsångarna, inte minst med de manliga sångarna

• Man kan förhindra objekt på stacken genom att göra destruktorn privat (för att skapa objekt krävs då en s.k. factoryfunktion och en destroy()- funktion som gör

Den statistik som ligger till grund för allokering och miljövärdering av fjärrvärmeproduktion i kraftvärmeverk ska vara rensad från ren elproduktion och från

Förutsättningarna för aktiemarknaden har därmed varit i det närmaste ideala och marknaden har också slagit ”all-time high” i allt högre frekvens.. I detta läge är det

pylori bosätter sig i magsäcken och kan orsaka ett sjukdomsförlopp som till slut hos ca 1 % av alla infekterade med bakterien utvecklas till magcancer.. Det första steget i

fё r da tappar man snabbt ё verskadligheten, Nar anvandaren har komnlit till slutet av nyckeln och upptacker att han kommit fel sa ar dct inte langre latt att minnas vid vilka stcg

Man skulle kunna tro att Bhutans nya författning kommer ge bhutaneserna makten att välja sina egna kandidater i valen. Men det är en sanning med

En undersökning i Adelaide visar att 31 % av fotgängarna kände sig osäkra när de delar gångväg med elsparkcyklister (större andel ju äldre fotgängare), och 29 % av