Objektorientert prokrastinering
100 Questions
15 Views

Objektorientert prokrastinering

Created by
@TrustworthyHibiscus

Questions and Answers

Hvilke (en eller flere) av følgende utsagn er korrekte?

  • Linkeren sin oppgave er a kombinere kildekode til en enkel kjørefil ( executable).
  • Man kan finne feil i et program både under kompilering og under linking. (correct)
  • Kompilatoren sin oppgave er a kombinere objektkode fra forskjellige filer og produsere en ˚ enkelt kjørefil (executable).
  • En kompilator produserer ingen filer.
  • Hvilke (en eller flere) av følgende utsagn er korrekte?

  • Det spiller ingen rolle hvilken datatype man bruker med tanke på ytelse.
  • Divisjon av heltall gir svar som er avrundet til nærmeste hele tall.
  • Man kan lagre høyere verdier i en unsigned int enn i en int. (correct)
  • En unsigned int bruker like mange bits som en int. (correct)
  • Hvilke (en eller flere) av følgende utsagn er korrekte?

  • Navnerommet foo er i globalt skop. (correct)
  • Variablene x og y er i lokalt skop.
  • Variabelen z er skopet til for-løkka
  • Funksjonen bar() kan ikke kalles fra f() fordi f() er deklarert utenfor navnerommet foo.
  • Se pa klassedeklarasjonen under, hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Klassen har en implisitt standard (default) destruktør.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>En destruktør frigjør ressursene til et klasseobjekt.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>En enkel try-blokk kan ha flere tilhørende catch-blokker for å fange ulike unntak</p> Signup and view all the answers

    Se pa koden under. ˚ int a = 10; int* b = &a; Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>*(b++) endrer adressen som b inneholder</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Koden er et eksempel på grunn kopiering (shallow copy).</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>En funksjon merket som friend har tilgang til klassemedlemmer med tilgangsnivåene public, protected og private.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Man kan ikke bruke std::push back() for å legge til et element i et std::set.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Kompilatoren kan automatisk bestemme verdien på template-parametere i noen tilfeller.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>En AnimationWindow Widget er et grafisk element man kan interagere med.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Før man kan kjøre et C++ program må man kompilere kildekoden.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Man kan alltid gjøre eksplisitt typekonvertering heller enn implisitt typekonvertering.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>En klasse kan deklareres flere ganger.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Man kan deklarere nye medlemsfunksjoner til en klasse etter at klassen er deklarert.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Koden inneholder en minnelekkasje.</p> Signup and view all the answers

    Hvilke (en eller flere) av disse kan være medlemmer i en klasse?

    <p>Variabler</p> Signup and view all the answers

    Hvilken funksjon (en eller flere) har en rent virtuell (pure virtual) destruktør?

    <p>Tvinge arvende klasser til å implementere egne destruktører.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>C++ splitter unntak i detektering, via en try-blokk, og håndtering, via catch-blokker.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Hvis man vil endre verdien som en peker peker til kan man bruke *-operatoren.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Koden er et eksempel på dyp kopiering (deep copy).</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte?

    <p>Abstrakte klasser kan ha medlemmer som er protected</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekte om std::vector?

    <p>Verdien returnert av size() overstiger aldri verdien returnert av capacity().</p> Signup and view all the answers

    Hvilken verdi vil funksjonen foo returnere?

    <p>0</p> Signup and view all the answers

    Hva er verdien til d?

    <p>86</p> Signup and view all the answers

    Denne koden kompilerer ikke - hvorfor?

    <p>func() blir kalt før den har blitt definert.</p> Signup and view all the answers

    Hva må minimum presiseres ved variabeldeklarasjon?

    <p>Datatype</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Funksjonen incrementValue() har ingen bivirkninger (side effects).</p> Signup and view all the answers

    Hvilke (en eller flere) alternativ er en egendefinert type?

    <p>En enum</p> Signup and view all the answers

    Koden under er et eksempel på...

    <p>Dobbel tom (double free)</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Når func() returnerer er minnet som ble allokert til cppBook deallokert.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Koden inneholder en minnelekkasje.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>&amp;-operatoren kan brukes til å finne adressen til en variabel.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>å lage en instans av klassen vil allokere minne.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>friend-deklarasjoner gir tilgang til private klassemedlemmer.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>En konstant (const) referansevariabel kun kan leses.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Konverteringen medfører tap av presisjon.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Templates muliggjør generisk programmering i C++.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Konstruktører kan overlastes.</p> Signup and view all the answers

    Koden under er et eksempel på...

    <p>Minnelekkasje</p> Signup and view all the answers

    Hvilke (en eller flere) av funksjonene kan føre til at vektorens minneavtrykk øker?

    <p>resize()</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Hvis ImmutableSet::elements-variablen hadde vært public hadde friend vært unødvendig i ImmutableSet-klassen.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Medlemsfunksjonen rend() til std::list returnerer en iterator</p> Signup and view all the answers

    Hvilke (en eller flere) av alternativene er korrekt, i følge læreboken?

    <p>Ikke overlast en operator med mindre nytten er stor.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt om klassen Syllabus skal gjøres om til en templateklasse ved å bytte ut string content med Template<T> content?

    <p>Vi må endre alle medlemsfunksjonene til klassen.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Klassen har en standard (default) konstruktør.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Vi kan kun ha ´en fisk som heter Dory</p> Signup and view all the answers

    Du har fatt i oppgave å programmere sjakk. Kort fortalt består sjakk av 16 svarte og 16 hvite brikker på et 8x8-rutenett. Det finnes 6 ulike typer sjakkbrikker i hver farge, der alle typene ser forskjellige ut og kan bevege seg på forskjellige måter. Du ønsker å lage en klasse ChessPiece for a representere sjakkbrikkene. Hvilke (en eller flere) av alternativene under kan man gjøre for å gjøre klassen abstrakt?

    <p>Lage alle konstruktører abstrakte.</p> Signup and view all the answers

    Du har fatt i oppgave å programmere sjakk. Kort fortalt består sjakk av 16 svarte og 16 hvite brikker på et 8x8-rutenett. Det finnes 6 ulike typer sjakkbrikker i hver farge, der alle typene ser forskjellige ut og kan bevege seg på forskjellige måter. Du ønsker å lage en klasse ChessPiece for å representere sjakkbrikkene. Hvilken av disse (en eller flere) funksjonalitetene er det naturlig a ha med i den abstrakte ChessPiece-klassen?

    <p>Fargen på brikken.</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>C++ støtter objektorientert programmering</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>Templates kan brukes når man lager generelle klasser</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>En klasse kan ha flere konstruktører</p> Signup and view all the answers

    Hvilke (en eller flere) av følgende utsagn er korrekt?

    <p>This-pekeren til et objekt er lik pekeren til objektet</p> Signup and view all the answers

    Hvilke (en eller flere) kategori av feil har man gjort om en funksjon som skal generere en tilfeldig bokstav gir en alfakrøll?

    <p>Logisk feil</p> Signup and view all the answers

    Kodesnutten under inneholder en eller flere feil. Hvor i koden oppstår feilen(e)? Velg en eller flere kodelinjer:

    <p>6</p> Signup and view all the answers

    Se på koden under. Hva blir skrevet til skjerm når programmet kjører? Hvorfor er dette resultatet?

    <p>Programmet skriver The character Oh no! Something happened!til skjerm. Dette er fordi utstrømmen, cout, prøver a aksessere et element utenfor strengen ˚ characters og et std::out of rangeunntak blir utløst i .at() funksjonen. Kjøretidsmiljøet Runtime environmentet begynner da a rulle ˚ tilbake funksjonskall-stakken og prøver a matche det utløste unntaket med en passende ˚ catchblokk. Det viktige: Siden catch-blokken i funksjon b() ikke handterer ˚ out of range-unntak (en underklasse av std::logic error) fortsetter tilbakerullingen til unntaket blir plukket opp i den generelle catch-blokken i funksjon a. (Læreboken s. 146-147, 1126, Interaktiv forelesning 4)</p> Signup and view all the answers

    Forklar kort hvorfor funksjoner er nyttige.

    <p>• Separerer programlogikken. • Bidrar til bedre lesbarhet. • Motiverer gjenbruk av kode. • Gjør testing av koden enklere (ref. enhetstesting). (4.5.1, s. 115-116 i læreboka, forelesning 2)</p> Signup and view all the answers

    Hvordan blir argumentet arr gitt til funksjonen calculateSum? Syns du dette er et godt valg eller ville du ha gjort det på en annen måte? Begrunn svaret kort.

    <p>Argumentet arr gis til funksjonen ved hjelp av en referanse (pass-by-reference). For arr er en referanse et bedre valg enn a gi argumentet som en verdi ( ˚ pass-by-value) gitt at arrayet er stort. Derimot ville man heller gitt arr til funksjonen ved hjelp av en konstant referanse (pass-by-constreferance) fordi funksjonen ikke endrer arrayet. (8.5.3-8.5.6, s. 275 - 284 i læreboka)</p> Signup and view all the answers

    Hvorfor bør man ikke bruke []-operatoren til å indeksere et std::map eller et std::unordered map? Hva burde man gjøre i stedet for?

    <p>Når man bruker []-operatoren til å indeksere et ˚ std::map eller et std::unordered map vil man implisitt legge inn verdien i beholderen dersom den ikke finnes. I stedet for burde man bruke funksjonene std::insert() eller std::at() for a henholdvis skrive eller lese verdier til ˚ beholderen. (forelesning 8)</p> Signup and view all the answers

    Hvorfor er verdiene til a og b ulike?.

    <p>Hvis man aksesserer et element i en sekvens som en peker peker til ved a bruke ˚ []- operatoren og indeksen til elementet, bruker man informasjon om størrelsen til elementene for å hente ut riktig verdi. For et en sekvens med heltall vil element på indeks 1 ligge en heltallsstørrelse ˚ fra starten av minneomradet som pekeren peker til, mens for en sekvens med karakterer vil element ˚ pa indeks 1 ligge en karakterstørrelse fra starten av minneomr ˚ adet som pekeren peker til. Dermed ˚ vil a og b inneholde verdier fra ulike minneomrader. ˚ (17.4, 18.6.2, s.593-594, s.653-654 i læreboka)</p> Signup and view all the answers

    Hvorfor kompilerer ikke koden? Forklar kort. Hva må gjøres for at koden skal skrive ut ’Hello from B!’ gitt at du ikke kan endre noe i main?

    <p>Koden kompilerer ikke fordi vi prøver a overstyre den ikke-virtuelle ˚ greetingfunksjonen definert i A med override nøkkelordet, men dette nøkkelordet gir kun mening i sammenheng med virtuelle funksjoner. (Man kan overstyre funksjoner som ikke er deklarert som virtuelle ved a ha samme deklarasjon og parametere som funksjonen i baseklassen uten ˚ bruk av override nøkkelordet, men da blir funksjonen i baseklassen ’gjemt’ heller enn overskrevet.) (14.3, s. 504-513 i læreboka)</p> <p>Man kan gjøre greeting metoden i A overstyrbar ved å gjøre den virtual. (14.3, s. 504-513 i læreboka)</p> Signup and view all the answers

    Forklar kort hva en constexpr-funksjon er og hvorfor det kan være nyttig a bruke det.

    <p>En constexpr-funksjon er en funksjon som vi ønsker at kompilatoren skal evaluere. Når en funksjon evalueres av kompilatoren unngår vi potensielt mange evalueringer under kjøretid, så det kan bidra til a øke ytelsen til programmet. I tillegg kan det gjøre koden vår mer forståelig.</p> Signup and view all the answers

    Forklar kort hvorfor man må gi parameteren std::ostream som en referanse nar man overlaster operatoren.

    <p>For å kunne bruke operatoren med både std::cout og std::ofstream som begge arver fra std::ostream. I tillegg må man returnere den samme referansen til std::ostream for å kunne kjede sammen flere output, e.g., std::cout &lt;&lt; output &lt;&lt; another output &lt;&lt; std::endl. (forelesning 8 og 9)</p> Signup and view all the answers

    Hvorfor blir ’Hello World!’ printet to ganger selv om flag = false?

    <p>’Hello World!’ printes to ganger fordi en do-while-løkke utfører løkka en gang uansett ´ om betingelsen er sann eller ikke, og i den første gjennomgangen vil flag settes til true, som gjør at løkka utføres enda en gang. (4.4.2, s.109-113 i læreboka, forelesning 2)</p> Signup and view all the answers

    Forklar kort forskjellen pa enhetstesting ( unit testing), systemtesting (system testing) og regresjonstesting (regression testing)

    <p>Enhetstesting Test av mindre deler av et program, som for eksempel en funksjon eller en klasse. Hvis en enhetstest returnerer en feil, vet man at feilen er i den enheten man tester. Det er dermed lettere a finne feilen. ˚ Systemtesting Test av hele systemet. Hvis en systemtest returnerer en feil, vet man kun at feilen ligger et eller annet sted i programmet. Det er dermed vanskeligere a finne feilen. ˚ Regresjonstesting Omfatter bade enhetstesting og systemtesting for å sjekke at endringer man har ˚ gjort i et program ikke har introdusert feil. (23.3, s.992-993 i læreboka)</p> Signup and view all the answers

    Hva skjer når man bruker auto nøkkelordet til a deklarere en variabel og når kan det være nyttig å bruke det?

    <p>Når man deklarerer en variabel med auto nøkkelordet vil variabelen få typen til verdien den tilordnes. Dette kan være nyttig når typen til variabelen har et langt og komplisert navn, for ˚ eksempel hvis man deklarerer en iterator variabel. (Andre rimelige bruksomrader godtas også.) ˚ (21.2, s.760 i læreboka)</p> Signup and view all the answers

    Hvordan blir argumentene gitt til funksjonen scale? Syns du dette er et godt valg eller ville du gjort det på en annen måte? Begrunn svaret kort.

    <p>Bade argumentet ˚ number og argumentet factor gis til funksjonen ved hjelp av en referanse (pass-by-reference). For number er en referanse nødvendig fordi funksjonen endrer verdien til argumentet. For factor hadde det vært bedre å gi argumentet som en verdi ( pass-by-value) siden argumentet ikke endres og kun er en flyttalsverdi. ´ (8.5.3-8.5.6, s. 275 - 284 i læreboka)</p> Signup and view all the answers

    Forklar kort hvorfor referanser er nyttige

    <p>Man kan lage funksjoner med flere returverdier. • Man kan lage funksjoner som endrer et argument. • Man kan unnga unødvendig kopiering. ˚ • Man kan lage en variabel som kun kan leses</p> Signup and view all the answers

    Hvorfor gir det mening at std::map ikke støtter std::push back()?

    <p>Elementene i et std::map er ordnet basert på nøkkelen i (nøkkel,verdi) paret, så det gir mening at det ikke er mulig a plassere et element bakerst i sekvensen, som er funksjonaliteten til ˚ std::push back(). (21.6, s.776-788 i læreboka)</p> Signup and view all the answers

    I hvilket minneområde blir de ulike variablene og tilhørende data lagret?

    <p>print: statisk lager • vec og a: heap (data) og stakk (kontrollinformasjon) • arr, n, b og diffN: stakk • ptr: heap (data ptr peker pa) og stakk ( ˚ ptr) (17.4, s.591-592 i læreboka, forelesning 10)</p> Signup and view all the answers

    Hvorfor kompilerer ikke koden? Forklar kort. Hva må gjøres for å løse problemet gitt at du ikke kan endre noe i main?

    <p>Koden kompilerer ikke fordi vi prøver å lage et objekt av den abstrakte klassen B, noe som ikke er mulig. (14.2.1, 14.3, s.495-496, 504-513 i læreboka) Solution: Den rent virtuelle funksjonen foo ma overstyres i klassen B. (14.2.1, 14.3, s.495-496, 504-513 i læreboka)</p> Signup and view all the answers

    Under er kode i tre filer f1.h, f2.h og main.cpp. Hva er problemet og hva ville du gjort for a fikse det uten å fjerne eller flytte på koden som står der?

    <p>Problemet er at funksjonen get pi() blir definert to ganger når f1.h inkluderes i både f2.h og main.cpp. For a løse dette må #pragma once stå øverst i f1.h. (Det er god skikk og skrive #pragma once øverst i alle header-filer, sa det burde også stå øverst i f2.h, men det vil kompilere dersom det kun legges til i f1.h)</p> Signup and view all the answers

    Hva kan vi si om følgende feilmelding? Nevn gjerne feiltype (kompileringsfeil, linkerfeil, kjøretidsfeil eller logisk feil), årsak og mulig løsning

    <p>Dette er en linkerfeil, som oppstar på grunn av manglende definisjon av funksjonen utskrift(). Mulig løsning vil være a definere funksjonen i en av .cpp-filene, eller rette opp i skrivefeil ˚ i eventuell eksisterende definisjon som gjør at den ikke gjenkjennes som samme funksjon.</p> Signup and view all the answers

    Burde konstruktøren til en klasse som regel settes til a være private eller public? Forklar kort.

    <p>Konstruktøren bør være public, for ellers er det ikke mulig a konstruere et objekt av ˚ klassen. (Det er ogsa mulig å ha konstruktøren private dersom man bruker en friend-funksjon som kaller på konstruktøren, eller en friend-klasse. Abstrakte klasser kan også ha konstruktører som protected, dette kommer senere i pensum.)</p> Signup and view all the answers

    Hva er en switch? Gi et eksempel på hva swtich kan brukes til, og en fordel switch kan ha som et alternativ til if-struktur.

    <p>En switch baserer programflyten pa verdien av en variabel, slik at programmet oppfører seg ulikt basert på hvilken verdi variabelen har. Et eksempel kan være et menysys- tem, hvor bruker gir inn et av mange alternativer, for eksempel heltall 1-9, og programmet gjør ulike ting basert på hvilket alternativ brukeren velger. En fordel med dette er økt lesbar- het sammenlignet med en if-struktur.</p> Signup and view all the answers

    Hva blir skrevet ut til skjerm/terminal?

    <p>Gulrotkake Sjokoladekake</p> Signup and view all the answers

    Forklar kort hva en kompilator er

    <p>En kompilator er et program som oversetter et programmeringssprak (kildekode) til ˚ maskinlesbar kode (objektkode).</p> Signup and view all the answers

    Forklar kort hvorfor teknikken fremoverdeklarasjon brukes på linje 1 i koden under.

    <p>Linje 1 bruker fremoverdeklarasjon slik at kompilatoren far kjennskap til alle symboler før de benyttes ettersom kompilatoren prosesserer kildefiler fra topp til bunn. Pa den måten vil klassen B vite at klassen A eksisterer selv om A ikke blir fullt deklarert før senere i filen.</p> Signup and view all the answers

    Forklar kort hvorfor man må sjekke om resultatet ligger innenfor et intervall [a, c] når vi skal verifisere at en funksjon som utfører flyttalloperasjoner gir ønsket resultat b isteden for a sjekke at resultatet er lik b.

    <p>Når man gjør operasjoner med flyttall ( float og double) kan man fa et annet resultat enn det man forventer fordi en datamaskin representerer flyttall med et endelig antall desimaler fordi de er lagret med en fast mengde minne. Flyttall har derfor en tendens til a miste presisjon (minst viktige bit). Ved vertifisering av funksjonen må man derfor sjekke om resultatet er tilnær- met likt forventet resultat ved a sjekke om det er innenfor et spesifisert intervall. (s. 63 + 77 - 78 + 395 - 386 + 890 - 893 + 1099 - 1100 + 1219 i læreboken)</p> Signup and view all the answers

    Forklar kort hvorfor det er god praksis å deklarere en variabel konstant (const) når variabelen ikke skal endres.

    <p>A deklarere en variabel konstant gjør at man får feilmelding hvis man prøver å redefi- nere variabelen, noe som forhindrer utilsiktede endringer og gjør at man tidligere oppdager feil. I tillegg gjør det koden mer lesbar fordi det viser at en variabel ikke er ment til a endres. I noen ˚ tilfeller kan også kompilatoren dra nytte av const til optimalisering. (s. 95 - 97 i læreboken)</p> Signup and view all the answers

    Forklar hvorfor man bruker funksjoner

    <p>Gjør beregninger logisk atskilt • Tillater gjenbruk av funksjonalitet i programmet • Tillater abstraksjon • Gjør koden enklere å forstå • Forenkler testing</p> Signup and view all the answers

    Forklar kort bruksområdene til templates.

    <p>• Fa samme funksjon til å fungere for ulike typer ˚ • Lage klasser</p> Signup and view all the answers

    Forklar kort de fire ulike risikoene man har med pekere

    <p>Dinglende referanse (dangling pointer): Prøver a bruke en peker som refererer til minne ˚ som ikke er allokert lengre (deallokert) eller minne som ikke er korrekt initialisert. Slike feil vil i beste fall føre til at programmet kræsjer og i verste fall apne for sikkerhetshull i applika- ˚ sjonen. • Minnelekasje (over tid): Rydder ikke opp minnet som er allokert til pekerne før de gar ut av ˚ skop (kaller new men ikke delete) slik at programmet bruker mer minne enn nødvendig. • Dobbel tom (double free: Prøver a slette minne som allerede er slettet, noe som fører til at ˚ operativsystemet kaster unntak. • Dereferere en peker satt til nullptr: A dereferere en peker satt til nullptr resulterer vanligvis i feil.</p> Signup and view all the answers

    Forklar kort forskjellen mellom grunn kopi (shallow copy) og dyp kopi (deep copy).

    <p>• Grunn kopi (shallow copy) kopierer kun pekeren til variabelen (minneadressen) og ikke selve variabelen. Disse to pekerne refererer da til samme objekt (noe som kan skape problemer). • Dyp kopi (deep copy) kopierer derimot selve variabelen ved a flytte den til et annet sted i minnet. De to pekerne referer da til to ulike objekter.</p> Signup and view all the answers

    Forklar kort hvorfor man ma bruke funksjonen emplace_back() istedenfor funksjonen push_back() på en unique ptr for a legge til en ny verdi.

    <p>For a legge til en ny verdi for en unique ptr må man bruke emplace back()-funksjonen istedenfor push back()-funksjonen. Dette er fordi en unique_ptr ikke lar seg kopiere slik push back ()-funksjonen krever. Grunnen til at unique_ptr ikke lar seg kopiere er at det finnes maksimalt en kopi av unique_ptr ettersom den eier objektet den peker på. (s. 703 - 704 + 1149 - 1150 i læreboken + <a href="https://en.cppreference.com/w/cpp/container/vector/">https://en.cppreference.com/w/cpp/container/vector/</a> emplace_back) + <a href="https://en.cppreference.com/w/cpp/container/vector/push_back">https://en.cppreference.com/w/cpp/container/vector/push_back</a>)</p> Signup and view all the answers

    Forklar kort hovedforskjellen mellom prosedyreorientert programmering og objektorientert programmering.

    <p>I prosedyreorientert programmering er det funksjonene (prosedyren) som kontrollerer hva som skjer med dataen. (Funksjonaliteten blir organisert rundt funksjoner og all tilstand blir lagret i lokale eller globale variabler.) I objektorientert programmering er det derimot objektet som kontrollerer dataen og kan definere om og hvordan den kan tillates a endres. (Funksjon og tilstand blir bundet sammen i objekter, som gir en måte å resonnere rundt store programmer på en måte som samsvarer mer med den fysiske verdenen, slik at det blir enklere a beskrive komplekse systemer.)</p> Signup and view all the answers

    Forklar kort hvilke fordeler det er med objektorientert programmering.

    <p>Kontroll: Objektet definerer hva som kan og ikke kan gjøres med dataen som er gjemt inni, noe som gjør koden enklere a forst ˚ a.˚ • Gruppering: Dataen og funksjonene endrer dataen som er lokalisert sammen. • Modularitet: Siden all data og funksjonalitet er abstrahert vekk kan den enkelt byttes ut om nødvendig og gjør koden mer vedlikeholdbar over tid.</p> Signup and view all the answers

    Forklar kort i hvilke ulike tilfeller man bør bruke de ulike parameteroverføringene pass-by-value, pass-by-reference og pass-by-const-reference.

    <p>Pass-by-value bør brukes når man skal jobbe med mindre dataobjekter (f.eks. heltall, flytall og pekere) som det er hensiktsmessig a kopiere med tanke på minne og ytelse eller hvis man trenger a operere på en kopi av objektet i funksjonen. Hvis man skal sende store dataobjekter (f.eks. vektor og string) som krever mye minne og ytelse ved kopiering bør pass-by-const-reference brukes nar man ikke trenger å endre dataobjektene. Pass-by-reference bør derimot brukes når man må endre på slike store dataobjekter slik at end- ringen er synlig utenfor funksjonen, og ikke kan returnere et resultat istedet.</p> Signup and view all the answers

    Forklar kort hvordan inn/ut datahandtering ( input/output handling) foregår med strømmodellen (I/O stream model).

    <p>Programmeringsspraket C++ bruker den praktisk abstraksjonen strømmer ( streams) til å utføre inn- og utdataoperasjoner mellom primærminnet og sekvensielle medier slik som tastatur, skjerm eller en filer. Denne strømmen kalles input hvis retningen går fra en enhet (for eksempel et tastatur) til primær- minnet. Da konverteres et maskinsskrevet objekt til en sekvens av karakterer (bytes). (Det finnes en input-strøm av typen istream (cin) som tilgjengeligjør tekst fra standard-input i konsollen.) Motsatt kalles strømmen output hvis retningen gar fra primærminnet til en enhent (for eksempel en skjerm). I dette tilfellet konverteres en sekvens av karakterer (bytes) til et maskinsskrevet objekt. (Det finnes tre output-strømmer av typen ostream som printer ut tekst i konsollen: cout for normal output, cerr for feilmeldinger og clog for ytterligere info). (s. 346 - 349 + 1168 - 1169 i læreboken)</p> Signup and view all the answers

    Forklar kort fremgangsmaten for å opprette et grafisk brukergrensesnitt.

    <ol> <li>Fortelle hvor grafikk skal tegnes (opprette vinduet AnimationWindow).</li> <li>Fortelle hvilken grafikk som skal tegnes (opprette grafiske elementer).</li> <li>Definere hvilke av elementene som er interaktive (widgets).</li> <li>Definere hva som skjer når de interaktive elementene interageres med ( callback-funksjoner).</li> <li>Definere en løkke som sjekker etter endringer og oppdaterer det grafiske brukergrensesnittet når en hendelse programmet er interessert i inntreffer ( wait-loop). (s. 552 - 560 i læreboken + fagets dokument</li> </ol> Signup and view all the answers

    Forklar kort hovedforskjellen mellom kompileringsfeil, kjøretidsfeil og logiske feil.

    <p>Kompileringsfeil: Kode som ikke er i henhold til C++ standarden og blir oppdaget under kompileringssteget av byggingen slik at programmet vil ikke bygges. (Dette inkluderer linkerfeil som oppstar i det siste steget av byggingen (linkersteget) og syntaksfeil (ugyldig ˚ kode).) • Kjøretidsfeil: Feil som oppstar når koden kjører og gir udefinert oppførsel eller krasj/ ˚ terminasjon av program fordi antagelsene i programmet om “verden utenfor” er brutt. Denne typen feil kan ikke “fjernes” bare håndteres. ˚ • Logiske feil: Feil i logikken i programmet som gjør at det ikke oppfører seg som ønsket. Man får ingen indikasjon på hva feilen er eller hvor den befinner seg siden programmet ikke ˚ krasjer og det produseres ingen feilmelding.</p> Signup and view all the answers

    Hvorfor kompilerer ikke koden? Forklar kort. Hva må endres for å løse problemet?

    <p>Koden kompilerer ikke fordi initialiseringen av paint pa linje 12 ikke er gjort rik- ˚ tig. 1 kan ikke konverteres til PaintColour ettersom den den ikke er i skopet til enum-klassen PaintColour. Verdier fra enum-klasser ma refereres med fullt navn i det globale scopet. I til- ˚ legg er paint initialisert til et heltall istedenfor en verdi. (s. 318 - 320 + 1107 - 1108 i læreboken.) Kodelinje 12 må endres til: ˚ PaintColour paint = PaintColour::Yellow; (s. 318 - 320 + 1107 - 1108 i læreboken.)</p> Signup and view all the answers

    Forklar kort i hvilke ulike tilfeller man bør bruke de ulike tilgangsnivåene public, private og protected når man implementerer en klasse.

    <p>Det er best praksis at mest mulig i en klasse har tilgangsnivået private for å ha bedre kontroll. Tilgangsnivået private bør derfor brukes på alle medlemsvariabler, samt medlemsfunk- ˚ sjoner som kun er tiltenkt a være hjelpefunksjoner internt i klassen. Tilgangsnivået public bør kun brukes når man må. public bør i utgangspunktet kun brukes på konstruktører, destruktøren og medlemsfunksjoner som alle andre klasser skal ha tilgang til (slik som medlemsfunksjoner for å lese ( get-funksjoner) eller oppdatere verdien (set-funksjoner) til medlemsvariablene). For variabler bør public ungås da dette bryter enkapsuleringsprinsippet. Tilgangsnivået protected bør kun brukes når man ønsker å apne enkapsuleringen noe for klasser som arver. Medlemsfunksjoner som skal brukes av andre medlemsfunksjoner i en arvet klasse bør derfor ha tilgangsnivaet protected. (s. 210 + 306 - 307 + 312 - 313 + 492 - 493 + 496 - 499 + 511 + 1108 - 1110 i læreboken)</p> Signup and view all the answers

    Hvorfor kompilerer ikke koden? Forklar kort.

    <p>Koden kompilerer ikke fordi kopikonstruktøren til A ikke er definert (linkerfeil). Linje 15 forsøker a kopiere et objekt i klassen B, men kopikonstruktøren B arver fra klassen A er ikke definert, kun deklarert. (s. 77 + 504 - 508 + 631 - 636 i læreboken) Kopikonstruktøren må implementeres/defineres på linje 9 i klassen A. (s. 77 + 504 - 508 + 631 - 636 i læreboken)</p> Signup and view all the answers

    Forklar kort hvilke elementer som er nødvendig for a definere en funksjon.

    <p>Spesifisere returverditype (datatypen til det som returneres), funksjonsnavn, parameterliste (med null eller flere datatyper og navn) og funksjonskroppen med logikken til hva funksjonen skal gjøre. (p. 77, 113 - 115, 258 - 259, 272 - 273, 1219)</p> Signup and view all the answers

    Hva er hovedfordelen med lenket liste sammenlignet med tabeller/vektor?

    <p>Lenket liste egner seg nar det er behov for å legge inn og fjerne elementer på vilkårlige steder i kolleksjonen (når det ikke er behov for tilfeldig tilgang ( random-access) i konstant tid). Forklaring: Listen ligger ikke sammenhengende i minnet slik at man trenger ikke flytte andre elementer hver gang man skal legge til eller fjerne elementer slik som i tabeller/vektorer. (p. 650 - 654, 724</p> <ul> <li> <ol start="726"> <li></li> </ol> </li> </ul> Signup and view all the answers

    Forklar kort hvorfor heltallstypene char og int har ulike intervaller som verdiene de kan inneholde må være innenfor.

    <p>Fordi de bruker et forskjellig antall bits/bytes til å holde sin verdi da de er laget for ˚ forskjellige formal. ˚ char beskrivere en enkelt ASCII karakter og bruker derfor bare en byte mens ´ en int (som oftest) er definert som et 4-bytes heltall. (p. 77 - 78)</p> Signup and view all the answers

    Forklar med egne ord hva funksjonen under gjør.

    <p>Funksjonen returnerer neste char-verdi etter var hvis var er før ’f’/’F’ i alfabetet. Det vil si at funksjonen erstatter bokstavene a-e (enten de er store eller små), og også alle andre char-verdier mindre enn ’f’, med påfølgende char-verdi. Ny char-verdi (påfølgende verdi for alle char-verdier mindre enn ’f’ eller bare selve inputverdien for char-verdier større eller lik ’f’) returneres til slutt. (p. 60 - 65, 69 - 71, 113 - 117)</p> Signup and view all the answers

    Forklar med egne ord hva funksjonen under gjør.

    <p>Funksjonen inkrementerer (rekursivt) char-verdien var inntil den minst er ’f’ eller ’F’. Det vil si at funksjonen erstatter bokstavene a-e (enten de er store eller sma) og ˚ alle char-verdier mindre enn ’f’ med ’F’/’f’. Til slutt returneres char-verdien som blir ’f’ for alle char-verdier mindre eller lik ’f’ og inputverdien for char-verdier større enn ’F’/’f’. (p. 60 - 65, 69 - 71, 113 - 117, 289)</p> Signup and view all the answers

    Study Notes

    C++ Programming Concepts

    • Declaration of variables is done with type specification, e.g., int a = 10; for integer initialization.
    • A pointer to a variable can be created using int* b = &a;, storing the address of the variable a.

    Class Members

    • Members can include variables and functions relevant to the object's state and behavior.
    • The class can be converted to a template class to increase flexibility, allowing it to work with different data types.

    Abstract Classes

    • To make a class abstract, at least one pure virtual function must be declared, leading to polymorphism.
    • An abstract class serves as a blueprint for derived classes, which must implement its abstract methods.

    Standard Template Library (STL)

    • std::vector is a dynamic array that can grow in size, providing various member functions for element manipulation.
    • It's essential to understand the functions that can lead to increased memory usage in std::vector, such as push_back.

    Error Types in Programming

    • Errors can be categorized into compilation errors, linking errors, runtime errors, and logical errors.
    • Understanding where the error occurs helps in debugging and ensures the program compiles and runs correctly.

    Functions and Parameters

    • Functions are crucial for code organization and reuse, enabling distinct tasks to be handled separately.
    • Parameters can be passed by value, reference, or constant reference depending on requirements for efficiency and safety.

    Memory Management

    • The use of auto keyword simplifies variable declaration and type inference.
    • Dynamic memory management functions like new and delete can lead to memory leaks if not handled properly.

    Object-Oriented Programming Concepts

    • Object-oriented programming (OOP) emphasizes the use of classes and objects, promoting encapsulation, inheritance, and polymorphism.
    • Benefits of OOP include improved code maintainability, reusability, and ability to model real-world scenarios more effectively.

    Testing Types

    • Unit testing focuses on individual components, whereas system testing examines the entire system's compliance with specified requirements.
    • Regression testing ensures that recent changes haven't adversely affected existing functionality.

    Const Variables and Safety

    • Declaring variables as const is good practice as it prevents unintended modification, enhancing code safety and optimization.
    • Forward declarations allow compilers to recognize functions or classes that are defined later, preventing errors.

    User Input/Output Handling

    • Input/output handling in C++ is performed primarily through streams, allowing data to be read and written efficiently.
    • The stream model simplifies the interface for handling input from various sources and output to different destinations, including files and console.

    Key Language Features

    • switch statements offer a more organized structure for multi-way branching compared to multiple if statements.
    • Differentiating between shallow and deep copies of objects is crucial for managing memory correctly, especially with pointer-based structures.

    General Guidelines

    • Regularly checking if a function's result lies within an acceptable range is key to verifying the accuracy of operations involving floating-point arithmetic.
    • Constructors should typically be public to allow instantiation but can be made private in singleton patterns or factory methods for control over object creation.

    Studying That Suits You

    Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

    Quiz Team

    Description

    Test your knowledge with this true or false quiz. Determine which of the provided statements are correct by selecting one or more options. It's an engaging way to verify your understanding of various facts.

    More Quizzes Like This

    AI Knowledge Assessment Quiz
    6 questions
    Theoretical Knowledge Assessment Quiz
    5 questions
    Use Quizgecko on...
    Browser
    Browser