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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (Objašnjenja i formatiranje)
 
(Није приказана једна међуизмена другог корисника)
Ред 10: Ред 10:


int main() {
int main() {
int niz[] = { 1, 2, 3 };
    int niz[] = { 1, 2, 3 };
int i;
    int i;
cin >> i;
    cin >> i;
cout << niz[i];
    cout << niz[i];
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# Postoji problem curenja memorije.
# Postoji problem curenja memorije.
# <span class="solution">Niz ima tačno 3 elemenata.</span>
# <span class="solution">Niz ima tačno 3 elementa.</span>
# Postoji problem sa visećim pokazivačem.
# Postoji problem sa visećim pokazivačem.
# Ako se na standardni ulaz upiše 1, program će ispisati 1.
# Ako se na standardni ulaz upiše 1, program će ispisati 1.
</div>
</div>
=== 2. zadatak ===
=== 2. zadatak ===
Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++?
Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++?
Ред 29: Ред 30:


int main() {
int main() {
char slova[] = "slova";
    char slova[] = "slova";
char* const pk = slova;
    char* const pk = slova;
     ???
     ???
}
}
Ред 36: Ред 37:
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <code>pk++;</code>
# <code>pk++;</code>
# <span class="solution"><code>(*pk)++;</code></span>
# <code class="solution">(*pk)++;</code>
# <code>pk = "xyz";</code>
# <code>pk = "xyz";</code>
# <span class="solution"><code>char c = pk[1];</code></span>
# <code class="solution">char c = pk[1];</code>
# <span class="solution"><code>pk[0] = 'a';</code></span>
# <code class="solution">pk[0] = 'a';</code>
</div>
</div>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation"><code>pk</code> je konstantni pokazivač na char što znači da ne može da se promeni na šta on pokazuje, tako da su prvi i treći odgovori netačni. Drugi i peti odgovori su tačni jer je samo pokazivač konstantan, a ne promenljiva na koju pokazuje. </span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation"><code>pk</code> je konstantni pokazivač na <code>char</code> što znači da ne može da se promeni na šta on pokazuje, tako da su prvi i treći odgovori netačni. Drugi i peti odgovori su tačni jer je samo pokazivač konstantan, a ne promenljiva na koju pokazuje.</span>
 
=== 3. zadatak ===
=== 3. zadatak ===
Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++?
Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++?
Ред 49: Ред 51:


class X {
class X {
int a;
    int a;
public:
public:
static int y;
    static int y;
int b;
    int b;
private:
private:
static int x;
    static int x;
};
};


Ред 61: Ред 63:


int main() {
int main() {
X obj;
    X obj;
     ???
     ???
}
}
Ред 67: Ред 69:
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <code>obj.a = 5;</code>
# <code>obj.a = 5;</code>
# <span class="solution"><code>obj.b = 5;</code></span>
# <code class="solution">obj.b = 5;</code>
# <span class="solution"><code>obj.y = 5;</code></span>
# <code class="solution">obj.y = 5;</code>
# <code>obj.x = 5;</code>
# <code>obj.x = 5;</code>
# <code>X::y = 5;</code>
# <code class="solution">X::y = 5;</code>
</div>
</div>
=== 4. zadatak ===
=== 4. zadatak ===
Šta ispisuje sledeći kod na programskom jeziku C++?  
Šta ispisuje sledeći kod na programskom jeziku C++?  
Ред 80: Ред 83:
class X {
class X {
public:
public:
static X&& kreiraj() { X* pk = new X(); return static_cast<X&&>(*pk); }
    static X&& kreiraj() { X* pk = new X(); return static_cast<X&&>(*pk); }
void metod()& { cout << 1; }
    void metod()& { cout << 1; }
void metod()&& { cout << 2; }
    void metod()&& { cout << 2; }
};
};


int main() {
int main() {
X x;
    X x;
x.metod();
    x.metod();
X::kreiraj().metod();
    X::kreiraj().metod();
}
}
</syntaxhighlight>
</syntaxhighlight>
Ред 98: Ред 101:
# 21
# 21
</div>
</div>
=== 5. zadatak ===
=== 5. zadatak ===
Šta ispisuje sledeći kod na programskom jeziku C++?  
Šta ispisuje sledeći kod na programskom jeziku C++?  
Ред 107: Ред 111:
class A {
class A {
public:
public:
A() { cout << "0"; }
    A() { cout << "0"; }
};
};


class B{
class B{
A a;
    A a;
public:
public:
B() { cout << "1"; }
    B() { cout << "1"; }
};
};


class C : public B {
class C : public B {
A a;
    A a;
public:
public:
C() { cout << "2"; }
    C() { cout << "2"; }
};
};


int main() {
int main() {
C c;
    C c;
}
}
</syntaxhighlight>
</syntaxhighlight>
Ред 132: Ред 136:
# Nijedan od ponuđenih odgovora.
# Nijedan od ponuđenih odgovora.
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Kreće se sa inicijalizacijom C, pa se prelazi na inicijalizaciju njenog podobjekta klase B. B sadrži polje tipa A pa se prvo inicijalizuje A i ispisuje 0, a zatim završava inicijalizacija B i ispisuje 1. Nakon toga se prelazi na inicijalizaciju polja klase A u C i ispisuje 0, i na kraju se izvršava konstruktor C koji ispisuje 2.</span>
=== 6. zadatak ===
=== 6. zadatak ===
Šta je tačno od sledećih navoda o preklapanju operatora na jeziku C++?
Šta je tačno od sledećih navoda o preklapanju operatora na jeziku C++?
Ред 138: Ред 144:
# Kada se preklapa <code>()</code>, operator može da primi proizvoljno parametara ali svi moraju da budu standardnog tipa.
# Kada se preklapa <code>()</code>, operator može da primi proizvoljno parametara ali svi moraju da budu standardnog tipa.
# Funkcijska klasa je klasa koja preklapa barem jedan od operatora <code>() [] -></code>.
# Funkcijska klasa je klasa koja preklapa barem jedan od operatora <code>() [] -></code>.
# <span class="solution">Klasa može imati više preklopnjenih <code>new</code> operatora.</span>
# <span class="solution">Klasa može imati više preklopljenih <code>new</code> operatora.</span>
# <span class="solution"><code>new</code> operator se preklapa kao statički metod.</span>
# <span class="solution"><code>new</code> operator se preklapa kao statički metod.</span>
</div>
</div>
=== 7. zadatak ===
=== 7. zadatak ===
Šta je tačno od sledećih navoda o apstraktnim klasama na jeziku C++?
Šta je tačno od sledećih navoda o apstraktnim klasama na jeziku C++?
Ред 150: Ред 157:
# Apstraktna klasa se označava sa <code>abstract</code> u definiciji pre <code>class</code>.
# Apstraktna klasa se označava sa <code>abstract</code> u definiciji pre <code>class</code>.
</div>
</div>
=== 8. zadatak ===
=== 8. zadatak ===
Šta je tačno od sledećih navoda o šablonskim klasama na jeziku C++?
Šta je tačno od sledećih navoda o šablonskim klasama na jeziku C++?
Ред 159: Ред 167:
# ??
# ??
</div>
</div>
=== 9. zadatak ===
=== 9. zadatak ===
Šta je tačno od sledećih navoda o virtuelnim metodama na jeziku C++?
Šta je tačno od sledećih navoda o virtuelnim metodama na jeziku C++?
Ред 168: Ред 177:
# <span class="solution">Nestatički metod može da bude virtuelan.</span>
# <span class="solution">Nestatički metod može da bude virtuelan.</span>
</div>
</div>
=== 10. zadatak ===
=== 10. zadatak ===
Šta je tačno od sledećih navoda o rukovaocima izuzetaka na jeziku C++?
Šta je tačno od sledećih navoda o rukovaocima izuzetaka na jeziku C++?
Ред 177: Ред 187:
# Izuzetak ne može da se baci iz <code>catch</code> bloka.
# Izuzetak ne može da se baci iz <code>catch</code> bloka.
</div>
</div>
[[Категорија:Рокови]]
[[Категорија:ОО1]]


== G3 ==
== G3 ==
Ред 189: Ред 197:
int i = 7;
int i = 7;
int main() {
int main() {
for(int i = 0; i < 3; i++) {
    for (int i = 0; i < 3; i++) {
if(int i = 1) {
        if (int i = 1) {
cout << i;
            cout << i;
}
        }
}
    }
     cout << i;
     cout << i;
     return 0;
     return 0;
Ред 199: Ред 207:
</syntaxhighlight>
</syntaxhighlight>
Odgovor: <span class="spoiler" data-solution="text">1117</span>
Odgovor: <span class="spoiler" data-solution="text">1117</span>
Objašnjenje: <span class="spoiler" data-solution="explanation">Uslov će uvek biti ispunjen i lokalna promenljiva koja se ispisuje u petlji će uvek biti 1. Na kraju svega toga, ispisuje se globalna promenljiva (lokalna promenljiva je izašla iz dosega).</span>


=== 2. zadatak ===
=== 2. zadatak ===
Šta može da stoje umesto #### da bi se kod napisan na jeziku C++ uspešno preveo?
Šta može da stoji umesto #### da bi se kod napisan na jeziku C++ uspešno preveo?
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
#include <iostream>
#include <iostream>


int main() {
int main() {
int a = 1, b = 2;
    int a = 1, b = 2;
     int * const p = &a;
     int * const p = &a;
     ####
     ####
}
}
</syntaxhighlight>
</syntaxhighlight>
Izaberite jedan ili više odgovora:
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <code>p++;</code>
# <code>p++;</code>
# <span class="solution"><code>*p = 1;</code></span>
# <code class="solution">*p = 1;</code>
# <code>p = &b;</code>
# <code>p = &b;</code>
# <span class="solution"><code>std::cout << p;</code></span>
# <code class="solution">std::cout << p;</code>
# <span class="solution"><code>std::cout << *p;</code></span>
# <code class="solution">std::cout << *p;</code>
</div>
</div>


Ред 228: Ред 237:
class Klasa {
class Klasa {
public:
public:
void metoda() & { cout << "1"; }
    void metoda() & { cout << "1"; }
void metoda() && { cout << "2"; }
    void metoda() && { cout << "2"; }
};
};


int main(){
int main(){
Klasa &&dRef = Klasa();
    Klasa &&dRef = Klasa();
dRef.metoda();
    dRef.metoda();
return 0;
    return 0;
}
}
</syntaxhighlight>
</syntaxhighlight>
Odgovor: <span class="spoiler" data-solution="text">1</span>
Odgovor: <span class="spoiler" data-solution="text">1</span>
Objašnjenje: <span class="spoiler" data-solution="explanation">Referenca na dvrednost je lvrednost.</span>


=== 4. zadatak ===
=== 4. zadatak ===
Ред 245: Ред 256:
// datoteka X.h
// datoteka X.h
class X {
class X {
int a;
    int a;
private:
private:
static int b;
    static int b;
public:
public:
static int c;
    static int c;
int d;
    int d;
};
};
</syntaxhighlight>
</syntaxhighlight>
Ред 261: Ред 272:


int main() {
int main() {
X y;
    X y;
     ***
     ***
}
}
</syntaxhighlight>
</syntaxhighlight>
koja od ovih navedenih naredbi ispravno zamenjuje ***?
koja od ovih navedenih naredbi ispravno zamenjuje ***?
Izaberite jedan ili više odgovora:
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <code>y.b = 2;</code>
# <code>y.b = 2;</code>
# <span class="solution"><code>X::c = 5;</code></span>
# <code class="solution">X::c = 5;</code>
# <code>y.a = 1;</code>
# <code>y.a = 1;</code>
# <code>X::d = 3;</code>
# <code>X::d = 3;</code>
# <span class="solution"><code>y.d = 4;</code></span>
# <code class="solution">y.d = 4;</code>
</div>
</div>


=== 5. zadatak ===
=== 5. zadatak ===
Šta od sledećeg važi za preklapanje operatora na programskom jeziku C++?
Šta od sledećeg važi za preklapanje operatora na programskom jeziku C++?
Izaberite jedan ili više odgovora:
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# Ukoliko je levi operand binarne operacije standardnog tipa mora se preklopiti kao metod odgovarajuće klase.
# Ukoliko je levi operand binarne operacije standardnog tipa mora se preklopiti kao metod odgovarajuće klase.
Ред 289: Ред 297:
=== 6. zadatak ===
=== 6. zadatak ===
Šta od sledećeg važi za izvođenje na programskom jeziku C++?
Šta od sledećeg važi za izvođenje na programskom jeziku C++?
Izaberite jedan ili više odgovora:
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Objekti izvedene klase sadrže bezimeni podobjekat osnovne klase.</span>
# <span class="solution">Objekti izvedene klase sadrže bezimeni podobjekat osnovne klase.</span>
Ред 308: Ред 314:
class B {
class B {
public:
public:
B() { std::cout << "b"; }
    B() { std::cout << "b"; }
};
};


class X : virtual public B {
class X : virtual public B {
public:
public:
X() { std::cout << "x"; }
    X() { std::cout << "x"; }
};
};


class Y : virtual public B {
class Y : virtual public B {
public:
public:
Y() { std::cout << "y"; }
    Y() { std::cout << "y"; }
};
};


class Z : public X, public Y {
class Z : public X, public Y {
public:
public:
Z() { std::cout << "z"; }
    Z() { std::cout << "z"; }
};
};


int main() {
int main() {
Z z;
    Z z;
}
}
</syntaxhighlight>
</syntaxhighlight>
Izaberite jedan odgovor:
<div class="abc-list" data-solution="single">
<div class="abc-list" data-solution="single">
# <span class="solution">bxyz</span>
# <span class="solution">bxyz</span>
Ред 339: Ред 343:
# Program se ne prevodi.
# Program se ne prevodi.
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Prvi primer redosleda konstrukcije na kraju prezentacije iz izvođenja profesora Igora Tartalje.</span>


=== 8. zadatak ===
=== 8. zadatak ===
Koje tvrdnje u vezi operatora za dinamičku konverziju (<code>dynamic_cast</code>) su tačne?
Koje tvrdnje u vezi operatora za dinamičku konverziju (<code>dynamic_cast</code>) su tačne?
Izaberite jedan ili više odgovora:
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Operator za dinamičku konverziju primenjen na referencu tipa osnovne klase pri neuspešnoj konverziji u referencu na izvedenu klasu baca izuzetak tipa <code>bad_cast</code>.</span>
# <span class="solution">Operator za dinamičku konverziju primenjen na referencu tipa osnovne klase pri neuspešnoj konverziji u referencu na izvedenu klasu baca izuzetak tipa <code>bad_cast</code>.</span>
Ред 355: Ред 358:
Ako su <code>I1, I2, I3</code> i <code>I4</code> klase izuzetaka i ako je u osnovnoj klasi <code>A</code> deklarisan metod:
Ako su <code>I1, I2, I3</code> i <code>I4</code> klase izuzetaka i ako je u osnovnoj klasi <code>A</code> deklarisan metod:
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
virtual void m() throw (I1, I2, I3):
virtual void m() throw (I1, I2, I3);
</syntaxhighlight>
</syntaxhighlight>
deklaracija metoda <code>m()</code> u izvedenoj klasi <code>B</code> može da bude:
deklaracija metoda <code>m()</code> u izvedenoj klasi <code>B</code> može da bude:
Izaberite jedan ili više odgovora:
<div class="abc-list" data-solution="multiple">
<div class="abc-list" data-solution="multiple">
# <span class="solution"><code>void m() noexcept:</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">void m() noexcept;</syntaxhighlight>
# <span class="solution"><code>void m() throw ():</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">void m() throw ();</syntaxhighlight>
# <span class="solution"><code>void m() throw (I1, I2, I3):</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">void m() throw (I1, I2, I3);</syntaxhighlight>
# <span class="solution"><code>void m() throw (I1):</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">void m() throw (I1);</syntaxhighlight>
# <code>void m() throw (I2, I4):</code>
# <syntaxhighlight lang="cpp" inline>void m() throw (I2, I4);</syntaxhighlight>
</div>
</div>


Ред 374: Ред 375:
</syntaxhighlight>
</syntaxhighlight>
metod <code>m</code> može da bude definisan izvan klase <code>K</code> na sledeći način:
metod <code>m</code> može da bude definisan izvan klase <code>K</code> na sledeći način:
Izaberite jedan odgovor:
<div class="abc-list" data-solution="single">
<div class="abc-list" data-solution="single">
# <code>void K::m(T t) { ... }</code>
# <syntaxhighlight lang="cpp" inline>void K::m(T t) { ... }</syntaxhighlight>
# <span class="solution"><code>template <class T> void K<T>::m(T t) { ... }</code></span>
# <syntaxhighlight lang="cpp" inline class="solution">template <class T> void K<T>::m(T t) { ... }</syntaxhighlight>
# <code>void K<T>::m(T t) { ... }</code>
# <syntaxhighlight lang="cpp" inline>void K<T>::m(T t) { ... }</syntaxhighlight>
</div>
</div>
[[Категорија:Рокови]]
[[Категорија:ОО1]]

Тренутна верзија на датум 1. фебруар 2022. у 00:49

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

G1

1. zadatak

Šta je tačno za navedeni isečak koda na jeziku C++?

#include <iostream>

using namespace std;

int main() {
    int niz[] = { 1, 2, 3 };
    int i;
    cin >> i;
    cout << niz[i];
}
  1. Postoji problem curenja memorije.
  2. Niz ima tačno 3 elementa.
  3. Postoji problem sa visećim pokazivačem.
  4. Ako se na standardni ulaz upiše 1, program će ispisati 1.

2. zadatak

Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++?

#include <iostream>
using namespace std;

int main() {
    char slova[] = "slova";
    char* const pk = slova;
    ???
}
  1. pk++;
  2. (*pk)++;
  3. pk = "xyz";
  4. char c = pk[1];
  5. pk[0] = 'a';

Objašnjenje: pk je konstantni pokazivač na char što znači da ne može da se promeni na šta on pokazuje, tako da su prvi i treći odgovori netačni. Drugi i peti odgovori su tačni jer je samo pokazivač konstantan, a ne promenljiva na koju pokazuje.

3. zadatak

Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++?

#include <iostream>
using namespace std;

class X {
    int a;
public:
    static int y;
    int b;
private:
    static int x;
};

int X::y = 1;
int X::x = 2;

int main() {
    X obj;
    ???
}
  1. obj.a = 5;
  2. obj.b = 5;
  3. obj.y = 5;
  4. obj.x = 5;
  5. X::y = 5;

4. zadatak

Šta ispisuje sledeći kod na programskom jeziku C++?

#include <iostream>
using namespace std;

class X {
public:
    static X&& kreiraj() { X* pk = new X(); return static_cast<X&&>(*pk); }
    void metod()& { cout << 1; }
    void metod()&& { cout << 2; }
};

int main() {
    X x;
    x.metod();
    X::kreiraj().metod();
}
  1. Program se ne prevodi.
  2. 1
  3. 11
  4. 12
  5. 21

5. zadatak

Šta ispisuje sledeći kod na programskom jeziku C++?

#include <iostream>

using namespace std;

class A {
public:
    A() { cout << "0"; }
};

class B{
    A a;
public:
    B() { cout << "1"; }
};

class C : public B {
    A a;
public:
    C() { cout << "2"; }
};

int main() {
    C c;
}
  1. Program se ne prevodi.
  2. 0120
  3. 0102
  4. Nijedan od ponuđenih odgovora.

Objašnjenje: Kreće se sa inicijalizacijom C, pa se prelazi na inicijalizaciju njenog podobjekta klase B. B sadrži polje tipa A pa se prvo inicijalizuje A i ispisuje 0, a zatim završava inicijalizacija B i ispisuje 1. Nakon toga se prelazi na inicijalizaciju polja klase A u C i ispisuje 0, i na kraju se izvršava konstruktor C koji ispisuje 2.

6. zadatak

Šta je tačno od sledećih navoda o preklapanju operatora na jeziku C++?

  1. Ako se preklopi operator new gubi se podrazumevani konstruktor.
  2. Kada se preklapa (), operator može da primi proizvoljno parametara ali svi moraju da budu standardnog tipa.
  3. Funkcijska klasa je klasa koja preklapa barem jedan od operatora () [] ->.
  4. Klasa može imati više preklopljenih new operatora.
  5. new operator se preklapa kao statički metod.

7. zadatak

Šta je tačno od sledećih navoda o apstraktnim klasama na jeziku C++?

  1. Apstraktna klasa je ona koja ima barem jednu apstraktnu metodu.
  2. Statički metod može da bude apstraktan.
  3. Klasa može biti apstraktna ako su joj destruktor i sve metode konkretne.
  4. Da bi izvedena klasa bila konkretna, mora da konkretizuje sve apstraktne metode.
  5. Apstraktna klasa se označava sa abstract u definiciji pre class.

8. zadatak

Šta je tačno od sledećih navoda o šablonskim klasama na jeziku C++?

  1. Može se izvoditi iz šablonskih klasa.
  2. Šablonska klasa ne može imati virtuelne metode.
  3. Šablonski metodi ne mogu biti virtuelni.
  4. ??
  5. ??

9. zadatak

Šta je tačno od sledećih navoda o virtuelnim metodama na jeziku C++?

  1. Destruktor može da bude virtuelan.
  2. Konstruktor može da bude virtuelan.
  3. Statički metod može da bude virtuelan.
  4. Prijateljska globalna funkcija može biti virtuelna.
  5. Nestatički metod može da bude virtuelan.

10. zadatak

Šta je tačno od sledećih navoda o rukovaocima izuzetaka na jeziku C++?

  1. Rukovalac tipa double može da prihvati izuzetke tipa int.
  2. Rukovalac tipa ... prihvata sve tipove izuzetaka.
  3. Rukovalac tipa int može da prihvati izuzetke tipa double.
  4. Izuzetak može da se baci iz try bloka.
  5. Izuzetak ne može da se baci iz catch bloka.

G3

1. zadatak

Šta ispisuje sledeći segment koda napisan na programskom jeziku C++?

#include <iostream>
using namespace std;

int i = 7;
int main() {
    for (int i = 0; i < 3; i++) {
        if (int i = 1) {
            cout << i;
        }
    }
    cout << i;
    return 0;
}

Odgovor: 1117

Objašnjenje: Uslov će uvek biti ispunjen i lokalna promenljiva koja se ispisuje u petlji će uvek biti 1. Na kraju svega toga, ispisuje se globalna promenljiva (lokalna promenljiva je izašla iz dosega).

2. zadatak

Šta može da stoji umesto #### da bi se kod napisan na jeziku C++ uspešno preveo?

#include <iostream>

int main() {
    int a = 1, b = 2;
    int * const p = &a;
    ####
}
  1. p++;
  2. *p = 1;
  3. p = &b;
  4. std::cout << p;
  5. std::cout << *p;

3. zadatak

Šta ispisuje sledeći program napisan na jeziku C++?

#include <iostream>
using namespace std;

class Klasa {
public:
    void metoda() & { cout << "1"; }
    void metoda() && { cout << "2"; }
};

int main(){
    Klasa &&dRef = Klasa();
    dRef.metoda();
    return 0;
}

Odgovor: 1

Objašnjenje: Referenca na dvrednost je lvrednost.

4. zadatak

Ukoliko su date sledeće datoteke "X.h" i "main.cpp":

// datoteka X.h
class X {
    int a;
private:
    static int b;
public:
    static int c;
    int d;
};
// datoteka main.cpp
#include "X.h"

int X::b = 1;
int X::c = 1;

int main() {
    X y;
    ***
}

koja od ovih navedenih naredbi ispravno zamenjuje ***?

  1. y.b = 2;
  2. X::c = 5;
  3. y.a = 1;
  4. X::d = 3;
  5. y.d = 4;

5. zadatak

Šta od sledećeg važi za preklapanje operatora na programskom jeziku C++?

  1. Ukoliko je levi operand binarne operacije standardnog tipa mora se preklopiti kao metod odgovarajuće klase.
  2. Operator [] se mora preklopiti kao globalna prijateljska funkcija.
  3. Operator dodele se mora preklopiti kao nestatički metod klase.
  4. Operator () se mora preklopiti kao nestatički metod klase.
  5. Binarni operator + je moguće preklopiti i kao metod klase i kao globalnu prijateljsku funkciju.

6. zadatak

Šta od sledećeg važi za izvođenje na programskom jeziku C++?

  1. Objekti izvedene klase sadrže bezimeni podobjekat osnovne klase.
  2. Preko objekata izvedene klase zaštićenim članovima osnovne klase se pristupa isto kao javnim članovima izvedene klase.
  3. Jezici koji podržavaju izvođenje se nazivaju objektno bazirani jezici.
  4. Modifikator final se koristi za klasu koja nije izvedena ni iz jedne klase.
  5. Kada se neka klasa izvede iz klase X, potrebno je izvršiti ponovno prevođenje klase X.

7. zadatak

Šta ispisuje sledeći program?

#include <iostream>
using namespace std;

class B {
public:
    B() { std::cout << "b"; }
};

class X : virtual public B {
public:
    X() { std::cout << "x"; }
};

class Y : virtual public B {
public:
    Y() { std::cout << "y"; }
};

class Z : public X, public Y {
public:
    Z() { std::cout << "z"; }
};

int main() {
    Z z;
}
  1. bxyz
  2. bxbyz
  3. byxz
  4. bybxz
  5. Program se ne prevodi.

Objašnjenje: Prvi primer redosleda konstrukcije na kraju prezentacije iz izvođenja profesora Igora Tartalje.

8. zadatak

Koje tvrdnje u vezi operatora za dinamičku konverziju (dynamic_cast) su tačne?

  1. Operator za dinamičku konverziju primenjen na referencu tipa osnovne klase pri neuspešnoj konverziji u referencu na izvedenu klasu baca izuzetak tipa bad_cast.
  2. Operator za dinamičku konverziju se mora primenjivati za svaku konverziju naviše (upcast) koja se vrši u vreme izvršenja programa.
  3. Operator za dinamičku konverziju se može primeniti na pokazivač ili referencu na objekat nepolimorfne osnovne klase.
  4. Operator za dinamičku konverziju primenjen na pokazivač tipa osnovne klase vraća nullptr ako konverzija u pokazivač tipa izvedene klase ne uspeva.
  5. Operator za dinamičku konverziju garantuje da će se konverzija u vreme izvršenja pravilno izvršiti i da će objekat biti konvertovan u ciljni objekat.

9. zadatak

Ako su I1, I2, I3 i I4 klase izuzetaka i ako je u osnovnoj klasi A deklarisan metod:

virtual void m() throw (I1, I2, I3);

deklaracija metoda m() u izvedenoj klasi B može da bude:

  1. void m() noexcept;
  2. void m() throw ();
  3. void m() throw (I1, I2, I3);
  4. void m() throw (I1);
  5. void m() throw (I2, I4);

10. zadatak

Ako je generička klasa definisana na sledeći način:

template <class T> class K { void m(T t); };

metod m može da bude definisan izvan klase K na sledeći način:

  1. void K::m(T t) { ... }
  2. template <class T> void K<T>::m(T t) { ... }
  3. void K<T>::m(T t) { ... }