ОО1/Јануар 2023 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(Нова страница: {{tocright}} '''Januar 2023. godine''' održan je 27. januara 2023. i trajao je 20 minuta. {{rešenja}} == 1. zadatak == Šta ispisuje navedeni isečak koda na jeziku…)
 
м (Formatiranje)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
'''Januar 2023. godine''' održan je 27. januara 2023. i trajao je 20 minuta.
'''Ispit u januarskom roku 2023. godine''' održan je 27. januara i trajao je 20 minuta.
{{rešenja}}
{{rešenja}}


Ред 26: Ред 26:
# 722
# 722
</div>
</div>
 
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">I referenca <code>r</code> i pokazivač <code>pok</code> ukazuju na prvi element niza p.</span>
Objašnjenje: <span class="spoiler" data-solution="explanation">I referenca r i pokazivač pok ukazuju na prvi element niza p.</span>


== 2. zadatak ==
== 2. zadatak ==
U kojim od navedenih funkcija klase K je pokazivač <code>this</code> tipa <code>const *K const</code>?
U kojim od navedenih funkcija klase K je pokazivač <code>this</code> tipa <code>const *K const</code>?
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <span class="solution"><code>void f() const</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">void f() const</syntaxhighlight>
# <code>friend f(const klasa& k)</code>
# <syntaxhighlight lang="cpp" inline>friend f(const klasa& k)</syntaxhighlight>
# <span class="solution"><code>void f(const klasa& k) const</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">void f(const klasa& k) const</syntaxhighlight>
# <code>void f(const klasa& k)</code>
# <syntaxhighlight lang="cpp" inline>void f(const klasa& k)</syntaxhighlight>
# <span class="solution"><code>const void f() const</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">const void f() const</syntaxhighlight>
</div>
</div>
 
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Da bi this bio ovog tipa, funkcija mora da bude inspektor (da ima modifikator <code>const</code>). Prijateljske funkcije uopšte nemaju pokazivač <code>this</code>.</span>
Objašnjenje: <span class="spoiler" data-solution="explanation">Da bi this bio ovog tipa, funkcija mora da bude inspector (da ima modifikator const). Friend funkcije uopšte nemaju pokazivač this.</span>
 


== 3. zadatak ==
== 3. zadatak ==
Ред 51: Ред 48:
# ???
# ???
</div>
</div>
 
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">U odgovoru pod b) misli se na pokazivač tipa takve klase, koji može da pokazuje na objekat neke neapstraktne klase izvedene iz nje.</span>
Objašnjenje: <span class="spoiler" data-solution="explanation">U odgovoru pod b) misli se na pokazivač tipa takve klase, koji može da pokazuje na objekat neke neapstraktne klase izvedene iz nje.</span>


== 4. zadatak ==
== 4. zadatak ==
Ред 63: Ред 59:
class X {
class X {
   int ii;
   int ii;
  public:
public:
    X(int i, int ii=7);
  X(int i, int ii=7);
}
};
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
Ред 84: Ред 80:
# <span class="solution">Metod bez parametara</span>
# <span class="solution">Metod bez parametara</span>
</div>
</div>
 
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Odgovor pod c) je tačan jer je u pitanju šiftovanje a ne preklopleni ispis.</span>
Objašnjenje: <span class="spoiler" data-solution="explanation">Odgovor pod c) je tačan jer je u pitanju šiftovanje a ne preklopleni ispis.</span>


== 6. zadatak ==
== 6. zadatak ==
Kako mora da izgleda definicija preklopljenog operatora + klase Racun da bi se dati program pokretao?
Kako mora da izgleda definicija preklopljenog operatora + klase <code>Racun</code> da bi se dati program pokretao?
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
#include <iostream>
#include <iostream>


int main {
int main() {
   Racun() + 100;
   Racun() + 100;
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <code>Racun& operator+(racun &r, int b);</code>
# <syntaxhighlight lang="cpp" inline>Racun& operator+(Racun &r, int b);</syntaxhighlight>
# <span class="solution"><code>Racun& operator+(int b)</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">Racun& operator+(int b)</syntaxhighlight>
# <code>Racun& operator+(int b, racun &r);</code>
# <syntaxhighlight lang="cpp" inline>Racun& operator+(int b, Racun &r);</syntaxhighlight>
# <span class="solution"><code>friend Racun& operator+(racun &r, int b)</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">friend Racun& operator+(Racun &r, int b)</syntaxhighlight>
# <code>friend Racun& operator+(int b, racun &r)</code>
# <syntaxhighlight lang="cpp" inline>friend Racun& operator+(int b, Racun &r)</syntaxhighlight>
</div>
</div>
 
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Treba voditi računa o redosledu i broju argumenata.</span>
Objašnjenje: <span class="spoiler" data-solution="explanation">Treba voditi računa o redosledu i broju argumenata.</span>


== 7. zadatak ==
== 7. zadatak ==
Ред 115: Ред 109:
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <code>A a; B b = a</code>
# <syntaxhighlight lang="cpp" inline>A a; B b = a</syntaxhighlight>
# <span class="solution"><code>A *a = new A</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">A *a = new A</syntaxhighlight>
# <span class="solution"><code>B b; A &a=b</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">B b; A &a=b</syntaxhighlight>
# <code>A &a = new B</code>
# <syntaxhighlight lang="cpp" inline>A &a = new B</syntaxhighlight>
</div>
</div>


Ред 128: Ред 122:
using namespace std;
using namespace std;


class Klasa{};
class Klasa {};


int main() {
int main() {
     try{
     try {
    try{
        try {
      cout << 0;
            cout << 0;
      throw Klasa();
            throw Klasa();
      cout << 1;
            cout << 1;
    }
        }
    catch(int i) {cout << 2;}
        catch(int i) {cout << 2;}
    cout << 3;
        cout << 3;
     }
     }
     catch(Klasa k) {cout << 4;}
     catch(Klasa k) {cout << 4;}
Ред 147: Ред 141:
'''Rešenje:''' <span class="spoiler" data-solution="text">045</span>
'''Rešenje:''' <span class="spoiler" data-solution="text">045</span>


Objašnjenje: <span class="spoiler" data-solution="explanation">Prvo će se ispisati 0 iz ugnježdenog try, a zatim se baca izuzetak tipa Klasa(). Pošto unutrašnji catch ne može to da uhvati, ceo segment koda do spoljašnjeg catch-a se preskače. Spoljašnji catch hvata izuzetak i program se na dalje normalno izvršava.</span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Prvo će se ispisati 0 iz ugnježdenog try, a zatim se baca izuzetak tipa Klasa(). Pošto unutrašnji catch ne može to da uhvati, ceo segment koda do spoljašnjeg catch-a se preskače. Spoljašnji catch hvata izuzetak i program se na dalje normalno izvršava.</span>
 


== 9. zadatak ==
== 9. zadatak ==
Šta može stakati umesto ### kako bi se na izlazu ispisalo 0?
Šta može stajati umesto ### kako bi se na izlazu ispisalo 0?
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
#include <iostream>
#include <iostream>


int main {
int x = 0;
  int x = 0;
namespace A {
  namespace A{
     int x = 3;
     int x = 3;
     namespace B{
     namespace B {
    int x = 2;
        int x = 2;
    ###
        void f() {
    }
            ###
        }
     }
     }
}
int main() {
    A::B::f();
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <span class="solution"><code>std::cout << x-2</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">std::cout << x-2</syntaxhighlight>
# <code>std::cout << :x</code>
# <syntaxhighlight lang="cpp" inline>std::cout << :x</syntaxhighlight>
# <span class="solution"><code>std::cout << ::x</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">std::cout << ::x</syntaxhighlight>
# <code>global x; std::cout << x;</code>
# <syntaxhighlight lang="cpp" inline>global x; std::cout << x;</syntaxhighlight>
</div>
</div>
 
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Odgovor pod b) nije tačan jer :x ne pristupa ničemu. Odgovor pod d) nije tačan jer global kao ključna reč ne postoji u C++.</span>
Objašnjenje: <span class="spoiler" data-solution="explanation">Odgovor pod b) nije tačan jer :x ne pristupa ničemu. Odgovor pod d) nije tačan jer global kao ključna reč ne postoji u C++.</span>


== 10. zadatak ==
== 10. zadatak ==
Šta će se ispisati na izlazu nakon izvršavanja ovog programa?
Šta će se ispisati na izlazu nakon izvršavanja ovog programa?
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
template <typename T, typename U> f(T t, U u)
#include <iostream>
cout << ‘a’;
using namespace std;
 
template <typename T, typename U> void f(T t, U u) {cout << 'a';}


void f(int i, double d)
void f(int i, double d) {cout << 'b';}
cout << ‘b’;


int main{
int main() {
f(1,2.0);
    f(1, 2.0);
f(1,1);
    f(1, 1);
f<int, int>(1,2.0);
    f<int, int>(1, 2.0);
f<>(1,2.0);
    f<>(1, 2.0);
f(1.0,2.0);
    f(1.0, 2.0);
}
}
</syntaxhighlight>
</syntaxhighlight>


'''Rešenje:''' <span class="spoiler" data-solution="text">baaaa <ref>Studenti koji su stavili 4/5 tačnih slova na odgovarajućim mestima dobili su 0.5 poena nakon prihvaćene molbe.</ref></span>
'''Rešenje:''' <span class="spoiler" data-solution="text">baaaa</span><ref>Studenti koji su stavili 4/5 tačnih slova na odgovarajućim mestima dobili su 0.5 poena nakon prihvaćene molbe.</ref>


== Napomene ==
== Napomene ==
<!-- Izbaciti ukoliko ne postoje napomene -->
<references />
<references />


[[Категорија:Рокови]]
[[Категорија:Рокови]]
[[Категорија:OO1]]<!-- Zameniti sa nazivom predmeta -->
[[Категорија:OO1]]

Верзија на датум 8. фебруар 2023. у 19:53

Ispit u januarskom roku 2023. godine održan je 27. januara i trajao je 20 minuta.

  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:

1. zadatak

Šta ispisuje navedeni isečak koda na jeziku C++?

#include <iostream>

using namespace std;

int main() {
    auto p = new int(5);
    int &r = *p;
    int *pok = p;
    r = 7;
    p[0] = 2;
    cout << r << *p << *pok;
}
  1. Program se ne prevodi.
  2. 777
  3. 222
  4. 555
  5. 722

Objašnjenje: I referenca r i pokazivač pok ukazuju na prvi element niza p.

2. zadatak

U kojim od navedenih funkcija klase K je pokazivač this tipa const *K const?

  1. void f() const
  2. friend f(const klasa& k)
  3. void f(const klasa& k) const
  4. void f(const klasa& k)
  5. const void f() const

Objašnjenje: Da bi this bio ovog tipa, funkcija mora da bude inspektor (da ima modifikator const). Prijateljske funkcije uopšte nemaju pokazivač this.

3. zadatak

Šta od sledećeg je moguće napraviti?

  1. Objekat klase koja sadrži apstraktni destruktor.
  2. Pokazivač na klasu koja ima apstraktni destruktor.
  3. Objekat klase koja sadrži samo virtuelne metode.
  4. Objekat klase koja sadrži virtuelni destruktor.
  5. ???

Objašnjenje: U odgovoru pod b) misli se na pokazivač tipa takve klase, koji može da pokazuje na objekat neke neapstraktne klase izvedene iz nje.

4. zadatak

Dati konstruktor je:

#include <iostream>

using namespace std;

class X {
   int ii;
public:
   X(int i, int ii=7);
};
  1. Konstruktor konverzije
  2. Kopirajući konstruktor
  3. Delegirajući konstruktor
  4. Podrazumevani konstruktor
  5. Ništa od navedenog

5. zadatak

Koji od navedenih metoda mogu biti virtuelni?

  1. Destruktor
  2. Konstruktor sa jednim parametrom tipa string
  3. Preklopljeni operator << (bitsko pomeranje ulevo)
  4. Preklopljeni operator delete
  5. Metod bez parametara

Objašnjenje: Odgovor pod c) je tačan jer je u pitanju šiftovanje a ne preklopleni ispis.

6. zadatak

Kako mora da izgleda definicija preklopljenog operatora + klase Racun da bi se dati program pokretao?

#include <iostream>

int main() {
   Racun() + 100;
}
  1. Racun& operator+(Racun &r, int b);
  2. Racun& operator+(int b)
  3. Racun& operator+(int b, Racun &r);
  4. friend Racun& operator+(Racun &r, int b)
  5. friend Racun& operator+(int b, Racun &r)

Objašnjenje: Treba voditi računa o redosledu i broju argumenata.

7. zadatak

Šta je moguće uraditi za navedene klase kako bi se program uspešno pokretao?

#include <iostream>

class A {};
class B: public A {};
  1. A a; B b = a
  2. A *a = new A
  3. B b; A &a=b
  4. A &a = new B

8. zadatak

Šta ispisuje navedeni isečak koda na jeziku C++?

#include <iostream>

using namespace std;

class Klasa {};

int main() {
    try {
        try {
            cout << 0;
            throw Klasa();
            cout << 1;
        }
        catch(int i) {cout << 2;}
        cout << 3;
    }
    catch(Klasa k) {cout << 4;}
    cout << 5;
    return 0;
}

Rešenje: 045

Objašnjenje: Prvo će se ispisati 0 iz ugnježdenog try, a zatim se baca izuzetak tipa Klasa(). Pošto unutrašnji catch ne može to da uhvati, ceo segment koda do spoljašnjeg catch-a se preskače. Spoljašnji catch hvata izuzetak i program se na dalje normalno izvršava.

9. zadatak

Šta može stajati umesto ### kako bi se na izlazu ispisalo 0?

#include <iostream>

int x = 0;
namespace A {
    int x = 3;
    namespace B {
        int x = 2;
        void f() {
            ###
        }
    }
}

int main() {
    A::B::f();
}
  1. std::cout << x-2
  2. std::cout << :x
  3. std::cout << ::x
  4. global x; std::cout << x;

Objašnjenje: Odgovor pod b) nije tačan jer :x ne pristupa ničemu. Odgovor pod d) nije tačan jer global kao ključna reč ne postoji u C++.

10. zadatak

Šta će se ispisati na izlazu nakon izvršavanja ovog programa?

#include <iostream>
using namespace std;

template <typename T, typename U> void f(T t, U u) {cout << 'a';}

void f(int i, double d) {cout << 'b';}

int main() {
    f(1, 2.0);
    f(1, 1);
    f<int, int>(1, 2.0);
    f<>(1, 2.0);
    f(1.0, 2.0);
}

Rešenje: baaaa[1]

Napomene

  1. Studenti koji su stavili 4/5 tačnih slova na odgovarajućim mestima dobili su 0.5 poena nakon prihvaćene molbe.