• No results found

Lösningsförslag till C++ tenta lördag 22 oktober

N/A
N/A
Protected

Academic year: 2021

Share "Lösningsförslag till C++ tenta lördag 22 oktober"

Copied!
2
0
0

Loading.... (view fulltext now)

Full text

(1)

Lösningsförslag till C++ tenta lördag 22 oktober

1. (a) Gagoh

Daddy says hi Mummy says hi

(b) Koden kan bli tvetydig. T.ex. genom att kommentera bort Baby::hello struct Baby : Mummy, Daddy {

// virtual void hello() { cout << "Gagoh" << endl; } };

Då blir b.hello() tvetydigt

(c) Det finns två Granny delar, en i Mummy och en i Daddy. Därför blir t.ex. b.Granny::hello() tvetydigt. Denna typ av arv kallas dia- mantarv.

2. (a) #include <algorithm>

template <class T>

bool check_duplicates(T begin, T end) { for (T i = begin; i != end; i++) {

if (find(begin, end, *i) != end) return true;

}

return false;

}

(b) check_duplicates kommer bara att titta på adresserna och inte inne- hållet.

(c) template <class T, class S>

bool check_duplicates(T begin, T end, S t) { // Samma som ovan

template <class T>

bool check_duplicates(T begin, T end, const char *) { string tmp;

map<string, int> holder;

for (T i = begin; i != end; i++) { tmp = *i;

if (holder.find(tmp) != holder.end()) return true;

holder[tmp] = 1;

}

return false;

}

Det är OK att bara skriva en specialicering som kompletterar a).

bool check_duplicates(char ** & begin, char ** end) { string tmp;

map<string, int> holder;

for (char** i = begin; i != end; i++) { // Likadant som ovan

1

(2)

(d) Båda grenarna av if-satsen måste kompileras och den ena grenen kanske inte går att kompilera, t.ex. tmp=*i när i är en float-pekare och tmp är en sträng.

Man använder if-satsen i run-time inte i compile-time.

template <class T>

bool check_duplicates_d(T begin, T end) {

typedef typename iterator_traits<T>::value_type S;

if (typeid(S) == typeid (char *)) { string tmp;

map<string, int> holder;

for (T i = begin; i != end; i++) { tmp = *i;

if (holder.find(tmp) != holder.end()) return true;

holder[tmp] = 1;

} } else {

S tmp;

map<S, int> holder;

for (T i = begin; i != end; i++) { tmp = *i;

if (holder.find(*i) != holder.end()) return true;

holder[*i] = 1;

} }

return false;

}

3. (a) tal4.cpp:21: error: invalid conversion from ‘Mother*’ to ‘Son*’

tal4.cpp:24: error: invalid conversion from ‘const char*’ to ‘char*’

tal4.cpp:26: error: invalid conversion from ‘void*’ to ‘Mother*’

tal4.cpp:28: error: assignment of read-only data-member ‘Son::christian_name’

(b) dynamic_cast, static_cast, reinterpret_cast och const_cast se bok eller föreläsningsanteckningar.

4. (a) Funktionen test_fighting allokerar spelaren på stacken och fight gör delete på spelaren om spelaren dör.

(b) Man gör delete på ett objekt på stacken.

(c) Monstervektorn innehåller fortfarande ogiltiga pekare som man gjort delete på efter varje fight.

2

References

Related documents

Ryrholm, Zoologiska Insti- tutionen, Entomtfutgiska avdelningen, Uppsalu Unit,ersitet, Box 561, S-751 22 Uppsala, Sweden.. Nya landskapsfynd av

Skriv en funktion som slumpar ut ett heltal mellan 1-13, skriv ytterliggare en funktion som tar 3 värden som indata och som skriver ut om det blir ”par” eller ”triss”.. Skriv

Kompletterande spårriktning ska utföras på järnvägen mellan Stångån och Nolby fredag till lördag klockan 24.00 - 06.00. Spårriktningsfordonet kommer att jobba periodvis

(b) Trefaktorsamspelet kan räknas ut genom att för varje rad i de andra kolumnerna multiplicera dem med varandra (Tänk på att + egentligen betyder +1 och - egentligen betyder -1)..

Po přečtení této práce je zřejmé, že autorka se problematice velmi intenzivně věnovala a prokózala schopnosti, jakou jsou intuice či flexibilita při

VYKRES MATERIAL POZNAMKA JED. OZNACENI

[r]

VYKRES MATERIAL POZNAMKA JED. OZNACENI