• kth.se
  • Studentwebben
  • Intranät
  • kth.se
  • Studentwebben
  • Intranät
Logga in
DD1388 VT18 (61021)
Komplettering för Augustitentan
Hoppa över till innehåll
Översikt
  • Logga in
  • Översikt
  • Kalender
  • Inkorg
  • Historik
  • Hjälp
Stäng
  • Min översikt
  • DD1388 VT18 (61021)
  • Uppgifter
  • Komplettering för Augustitentan
  • Startsida
  • Uppgifter
  • Sidor
  • Filer
  • Kursöversikt
  • Moduler
  • Samarbeten
  • Video Recording
  • Media Gallery
  • Course Evaluation

Komplettering för Augustitentan

  • Inlämningsdatum Inget inlämningsdatum
  • Poäng 0
  • Lämnar in en textimatningsruta eller en filuppladdning

Många studenter klarade delar av tentan men inte hela och erbjuds nu möjlighet att komplettera. Kompletteringen sker online och det går bara att komplettera till godkänt. Om du vill ha högre betyg så behöver du skriva tentan 2019.

Första uppgiften (uppgift 0) är obligatorisk för alla. Gör sedan de kompletteringsuppgifter (1-5) som du fått 'K' markerat på din skriftliga tentamen. 


Kompletteringsuppgift 0 
Rätta de första 5 uppgifterna på din tenta (inte betygshöjande uppgiften, även om du har gjort den) och kommentera alla fel och småfel som du hittar. Reflektera över och kommentera vad som är rätt och fel. Den här behöver vara bra för att få godkänd komplettering. Bifoga din rättade tenta när du skickar in.


Kompletteringsuppgift 1

Studera följande kod:

struct widget {
    const widget & operator=(const widget& rhs) const;
};

A) Förklara vad referenserna betyder och vad som händer om man tar bort dem.

B) Som koden ser ut ovan så är det en olämplig deklaration av en tilldelningsoperator. Varför det?

C) Ge exempel på en funktion där det är lämpligt att returnera en const-referens.
D) Ge exempel på en funktion där det är lämpligt att returnera en skrivbar referens.

Kompletteringsuppgift 2

Om du har fått komplettering på uppgift 2 så behöver du lösa denna uppgift:

Om du kör den här koden...

#include <iostream>
using namespace std;

struct base {
    int all_your_base;
    base(): all_your_base(0) {}
    base(int rhs): all_your_base(rhs) {}
    void operator=(const base& rhs) {
        cout << "base::operator=" << endl;      
    }
};

struct derived: public base {
    int are_belong_to_us;
    derived(): base(1), are_belong_to_us(2) {}
};

int main() {
    base b;
    derived d;
    b = b;
    d = d;
    b = d;
    cout << b.all_your_base << endl;
    cout << d.all_your_base << endl;
    cout << d.are_belong_to_us << endl;
    return 0;
}

...så skriver den ut detta...

base::operator=
base::operator=
base::operator=
0
1
2

Förklara i detalj rad för rad varför. Vilka metoder har anropats?

Kompletteringsuppgift 3

Klistra in nedanstående kod på Godbolt Links to an external site..

int square(int num) {
return num * num;
}


struct A{
int x;
virtual void foo() {
x += 1;
}
};


struct B:A{
void foo() {
x = 2;
}
};


int main() {
B b;
b.foo();
A* a = &b;
a->foo();
square(42);
return 0;
}

Studera skillnaden av de tre anropen i koden ovan och redogör för var i koden det är dynamisk bindning och vad det gör för skillnad i assemblerkoden. Du behöver inte kunna assembler för att lösa uppgiften, men räkna antalet instruktioner och försök uppskatta skillnaden i kostnad.

Kompletteringsuppgift 4
A) Vad är problemet med denna kod?

int main() {
int* v = new int[1000];
int* alias = v;
delete alias;
}
B) Den här koden har två off-by-one fel.
int foo(int* v) {
    for(int i=17; i<1000; i++) {
        v[i] = v[i+1];
    }
    for(int i=17; i<1000; i++) {
        v[i+1] = v[i];
    }
}

Vad är skillnaden på de båda felen? Vilket fel är värst, enligt dig? Diskutera och motivera ditt svar!

Kompletteringsuppgift 5:

Skriv en templatiserad funktion som tar in 4 iteratorer till början och slutet av två itererbara behållare. Behållarna innehåller en okänd typ som går att jämföra med !=. Funktionen ska returnera hammingavståndet Links to an external site. mellan innehållet i de båda behållarna.

0
Inkludera en beskrivning
Ytterligare kommentarer:
Maxresultat för gradering till > poäng
Inkludera en bedömningstitel

Matris

Hitta matris
Inkludera en titel
Hitta en matris
Titel
Du har redan bedömt studenter med den här matrisen. Större ändringar kan påverka resultaten för deras uppgifter.
 
 
 
 
 
 
 
     
Det går inte att ändra en matris efter att du börjat använda den.  
Titel
Kriterier Bedömningar Poäng
Det här kriteriet är länkat till ett lärandemål Beskrivning av kriterium
tröskel: 5 poäng
Redigera beskrivning av kriterium Ta bort kriterium rad
5 till >0 poäng Full poäng blank
0 till >0 poäng Inga poäng blank_2
Det här området kommer användas av utvärderaren för kommentarer relaterade till det här kriteriet.
poäng
  / 5 poäng
--
Ytterligare kommentarer
Det här kriteriet är länkat till ett lärandemål Beskrivning av kriterium
tröskel: 5 poäng
Redigera beskrivning av kriterium Ta bort kriterium rad
5 till >0 poäng Full poäng blank
0 till >0 poäng Inga poäng blank_2
Det här området kommer användas av utvärderaren för kommentarer relaterade till det här kriteriet.
poäng
  / 5 poäng
--
Ytterligare kommentarer
Poängsumma: 5 av 5