ОО1/Јануар 2022 — разлика између измена
(WIP; izvor: Petar Marković (2021/0329)) |
м (Objašnjenja i formatiranje) |
||
| (Нису приказане 4 међуизмене 2 корисника) | |||
| Ред 1: | Ред 1: | ||
{{tocright}} | {{tocright}} | ||
{{rešenja}} | {{rešenja}} | ||
== G1 == | |||
== 1. zadatak == | === 1. zadatak === | ||
Šta je tačno za navedeni isečak koda na jeziku C++? | Šta je tačno za navedeni isečak koda na jeziku C++? | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
| Ред 10: | Ред 10: | ||
int main() { | int main() { | ||
int niz[] = { 1, 2, 3 }; | |||
int i; | |||
cin >> 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 | # <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 == | |||
== 3. zadatak == | === 2. zadatak === | ||
== 4. zadatak == | Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++? | ||
== 5. zadatak == | <syntaxhighlight lang="cpp"> | ||
== 6. zadatak == | #include <iostream> | ||
== 7. zadatak == | using namespace std; | ||
== 8. zadatak == | |||
== 9. zadatak == | int main() { | ||
== 10. zadatak == | char slova[] = "slova"; | ||
char* const pk = slova; | |||
??? | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="multiple"> | |||
# <code>pk++;</code> | |||
# <code class="solution">(*pk)++;</code> | |||
# <code>pk = "xyz";</code> | |||
# <code class="solution">char c = pk[1];</code> | |||
# <code class="solution">pk[0] = 'a';</code> | |||
</div> | |||
'''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 === | |||
Šta je moguće staviti umesto ??? na ovom isečku koda na jeziku C++? | |||
<syntaxhighlight lang="cpp"> | |||
#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; | |||
??? | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="multiple"> | |||
# <code>obj.a = 5;</code> | |||
# <code class="solution">obj.b = 5;</code> | |||
# <code class="solution">obj.y = 5;</code> | |||
# <code>obj.x = 5;</code> | |||
# <code class="solution">X::y = 5;</code> | |||
</div> | |||
=== 4. zadatak === | |||
Šta ispisuje sledeći kod na programskom jeziku C++? | |||
<syntaxhighlight lang="cpp"> | |||
#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(); | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="single"> | |||
# Program se ne prevodi. | |||
# 1 | |||
# 11 | |||
# <span class="solution">12</span> | |||
# 21 | |||
</div> | |||
=== 5. zadatak === | |||
Šta ispisuje sledeći kod na programskom jeziku C++? | |||
<syntaxhighlight lang="cpp"> | |||
#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; | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="single"> | |||
# Program se ne prevodi. | |||
# 0120 | |||
# <span class="solution">0102</span> | |||
# Nijedan od ponuđenih odgovora. | |||
</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 === | |||
Šta je tačno od sledećih navoda o preklapanju operatora na jeziku C++? | |||
<div class="abc-list" data-solution="multiple"> | |||
# Ako se preklopi operator <code>new</code> gubi se podrazumevani konstruktor. | |||
# 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>. | |||
# <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> | |||
</div> | |||
=== 7. zadatak === | |||
Šta je tačno od sledećih navoda o apstraktnim klasama na jeziku C++? | |||
<div class="abc-list" data-solution="multiple"> | |||
# <span class="solution">Apstraktna klasa je ona koja ima barem jednu apstraktnu metodu.</span> | |||
# Statički metod može da bude apstraktan. | |||
# Klasa može biti apstraktna ako su joj destruktor i sve metode konkretne. | |||
# <span class="solution">Da bi izvedena klasa bila konkretna, mora da konkretizuje sve apstraktne metode.</span> | |||
# Apstraktna klasa se označava sa <code>abstract</code> u definiciji pre <code>class</code>. | |||
</div> | |||
=== 8. zadatak === | |||
Šta je tačno od sledećih navoda o šablonskim klasama na jeziku C++? | |||
<div class="abc-list" data-solution="multiple"> | |||
# <span class="solution">Može se izvoditi iz šablonskih klasa.</span> | |||
# Šablonska klasa ne može imati virtuelne metode. | |||
# <span class="solution">Šablonski metodi ne mogu biti virtuelni.</span> | |||
# ?? | |||
# ?? | |||
</div> | |||
=== 9. zadatak === | |||
Šta je tačno od sledećih navoda o virtuelnim metodama na jeziku C++? | |||
<div class="abc-list" data-solution="multiple"> | |||
# <span class="solution">Destruktor može da bude virtuelan.</span> | |||
# Konstruktor može da bude virtuelan. | |||
# Statički metod može da bude virtuelan. | |||
# Prijateljska globalna funkcija može biti virtuelna. | |||
# <span class="solution">Nestatički metod može da bude virtuelan.</span> | |||
</div> | |||
=== 10. zadatak === | |||
Šta je tačno od sledećih navoda o rukovaocima izuzetaka na jeziku C++? | |||
<div class="abc-list" data-solution="multiple"> | |||
# Rukovalac tipa <code>double</code> može da prihvati izuzetke tipa <code>int</code>. | |||
# <span class="solution">Rukovalac tipa <code>...</code> prihvata sve tipove izuzetaka.</span> | |||
# Rukovalac tipa <code>int</code> može da prihvati izuzetke tipa <code>double</code>. | |||
# <span class="solution">Izuzetak može da se baci iz <code>try</code> bloka.</span> | |||
# Izuzetak ne može da se baci iz <code>catch</code> bloka. | |||
</div> | |||
== G3 == | |||
=== 1. zadatak === | |||
Šta ispisuje sledeći segment koda napisan na programskom jeziku C++? | |||
<syntaxhighlight lang="cpp"> | |||
#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; | |||
} | |||
</syntaxhighlight> | |||
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 === | |||
Šta može da stoji umesto #### da bi se kod napisan na jeziku C++ uspešno preveo? | |||
<syntaxhighlight lang="cpp"> | |||
#include <iostream> | |||
int main() { | |||
int a = 1, b = 2; | |||
int * const p = &a; | |||
#### | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="multiple"> | |||
# <code>p++;</code> | |||
# <code class="solution">*p = 1;</code> | |||
# <code>p = &b;</code> | |||
# <code class="solution">std::cout << p;</code> | |||
# <code class="solution">std::cout << *p;</code> | |||
</div> | |||
=== 3. zadatak === | |||
Šta ispisuje sledeći program napisan na jeziku C++? | |||
<syntaxhighlight lang="cpp"> | |||
#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; | |||
} | |||
</syntaxhighlight> | |||
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 === | |||
Ukoliko su date sledeće datoteke "X.h" i "main.cpp": | |||
<syntaxhighlight lang="cpp"> | |||
// datoteka X.h | |||
class X { | |||
int a; | |||
private: | |||
static int b; | |||
public: | |||
static int c; | |||
int d; | |||
}; | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="cpp"> | |||
// datoteka main.cpp | |||
#include "X.h" | |||
int X::b = 1; | |||
int X::c = 1; | |||
int main() { | |||
X y; | |||
*** | |||
} | |||
</syntaxhighlight> | |||
koja od ovih navedenih naredbi ispravno zamenjuje ***? | |||
<div class="abc-list" data-solution="multiple"> | |||
# <code>y.b = 2;</code> | |||
# <code class="solution">X::c = 5;</code> | |||
# <code>y.a = 1;</code> | |||
# <code>X::d = 3;</code> | |||
# <code class="solution">y.d = 4;</code> | |||
</div> | |||
=== 5. zadatak === | |||
Šta od sledećeg važi za preklapanje operatora na programskom jeziku C++? | |||
<div class="abc-list" data-solution="multiple"> | |||
# Ukoliko je levi operand binarne operacije standardnog tipa mora se preklopiti kao metod odgovarajuće klase. | |||
# Operator <code>[]</code> se mora preklopiti kao globalna prijateljska funkcija. | |||
# <span class="solution">Operator dodele se mora preklopiti kao nestatički metod klase.</span> | |||
# <span class="solution">Operator <code>()</code> se mora preklopiti kao nestatički metod klase.</span> | |||
# <span class="solution">Binarni operator <code>+</code> je moguće preklopiti i kao metod klase i kao globalnu prijateljsku funkciju.</span> | |||
</div> | |||
=== 6. zadatak === | |||
Šta od sledećeg važi za izvođenje na programskom jeziku C++? | |||
<div class="abc-list" data-solution="multiple"> | |||
# <span class="solution">Objekti izvedene klase sadrže bezimeni podobjekat osnovne klase.</span> | |||
# Preko objekata izvedene klase zaštićenim članovima osnovne klase se pristupa isto kao javnim članovima izvedene klase. | |||
# Jezici koji podržavaju izvođenje se nazivaju objektno bazirani jezici. | |||
# Modifikator <code>final</code> se koristi za klasu koja nije izvedena ni iz jedne klase. | |||
# Kada se neka klasa izvede iz klase X, potrebno je izvršiti ponovno prevođenje klase X. | |||
</div> | |||
=== 7. zadatak === | |||
Šta ispisuje sledeći program? | |||
<syntaxhighlight lang="cpp"> | |||
#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; | |||
} | |||
</syntaxhighlight> | |||
<div class="abc-list" data-solution="single"> | |||
# <span class="solution">bxyz</span> | |||
# bxbyz | |||
# byxz | |||
# bybxz | |||
# Program se ne prevodi. | |||
</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 === | |||
Koje tvrdnje u vezi operatora za dinamičku konverziju (<code>dynamic_cast</code>) su tačne? | |||
<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> | |||
# Operator za dinamičku konverziju se mora primenjivati za svaku konverziju naviše (<code>upcast</code>) koja se vrši u vreme izvršenja programa. | |||
# Operator za dinamičku konverziju se može primeniti na pokazivač ili referencu na objekat nepolimorfne osnovne klase. | |||
# <span class="solution">Operator za dinamičku konverziju primenjen na pokazivač tipa osnovne klase vraća <code>nullptr</code> ako konverzija u pokazivač tipa izvedene klase ne uspeva.</span> | |||
# 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. | |||
</div> | |||
=== 9. zadatak === | |||
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"> | |||
virtual void m() throw (I1, I2, I3); | |||
</syntaxhighlight> | |||
deklaracija metoda <code>m()</code> u izvedenoj klasi <code>B</code> može da bude: | |||
<div class="abc-list" data-solution="multiple"> | |||
# <syntaxhighlight lang="cpp" inline class="solution">void m() noexcept;</syntaxhighlight> | |||
# <syntaxhighlight lang="cpp" inline class="solution">void m() throw ();</syntaxhighlight> | |||
# <syntaxhighlight lang="cpp" inline class="solution">void m() throw (I1, I2, I3);</syntaxhighlight> | |||
# <syntaxhighlight lang="cpp" inline class="solution">void m() throw (I1);</syntaxhighlight> | |||
# <syntaxhighlight lang="cpp" inline>void m() throw (I2, I4);</syntaxhighlight> | |||
</div> | |||
=== 10. zadatak === | |||
Ako je generička klasa definisana na sledeći način: | |||
<syntaxhighlight lang="cpp"> | |||
template <class T> class K { void m(T t); }; | |||
</syntaxhighlight> | |||
metod <code>m</code> može da bude definisan izvan klase <code>K</code> na sledeći način: | |||
<div class="abc-list" data-solution="single"> | |||
# <syntaxhighlight lang="cpp" inline>void K::m(T t) { ... }</syntaxhighlight> | |||
# <syntaxhighlight lang="cpp" inline class="solution">template <class T> void K<T>::m(T t) { ... }</syntaxhighlight> | |||
# <syntaxhighlight lang="cpp" inline>void K<T>::m(T t) { ... }</syntaxhighlight> | |||
</div> | |||
[[Категорија:Рокови]] | [[Категорија:Рокови]] | ||
[[Категорија:ОО1]] | [[Категорија:ОО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];
}
- Postoji problem curenja memorije.
- Niz ima tačno 3 elementa.
- Postoji problem sa visećim pokazivačem.
- 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;
???
}
pk++;(*pk)++;pk = "xyz";char c = pk[1];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;
???
}
obj.a = 5;obj.b = 5;obj.y = 5;obj.x = 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();
}
- Program se ne prevodi.
- 1
- 11
- 12
- 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;
}
- Program se ne prevodi.
- 0120
- 0102
- 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++?
- Ako se preklopi operator
newgubi se podrazumevani konstruktor. - Kada se preklapa
(), operator može da primi proizvoljno parametara ali svi moraju da budu standardnog tipa. - Funkcijska klasa je klasa koja preklapa barem jedan od operatora
() [] ->. - Klasa može imati više preklopljenih
newoperatora. newoperator se preklapa kao statički metod.
7. zadatak
Šta je tačno od sledećih navoda o apstraktnim klasama na jeziku C++?
- Apstraktna klasa je ona koja ima barem jednu apstraktnu metodu.
- Statički metod može da bude apstraktan.
- Klasa može biti apstraktna ako su joj destruktor i sve metode konkretne.
- Da bi izvedena klasa bila konkretna, mora da konkretizuje sve apstraktne metode.
- Apstraktna klasa se označava sa
abstractu definiciji preclass.
8. zadatak
Šta je tačno od sledećih navoda o šablonskim klasama na jeziku C++?
- Može se izvoditi iz šablonskih klasa.
- Šablonska klasa ne može imati virtuelne metode.
- Šablonski metodi ne mogu biti virtuelni.
- ??
- ??
9. zadatak
Šta je tačno od sledećih navoda o virtuelnim metodama na jeziku C++?
- Destruktor može da bude virtuelan.
- Konstruktor može da bude virtuelan.
- Statički metod može da bude virtuelan.
- Prijateljska globalna funkcija može biti virtuelna.
- Nestatički metod može da bude virtuelan.
10. zadatak
Šta je tačno od sledećih navoda o rukovaocima izuzetaka na jeziku C++?
- Rukovalac tipa
doublemože da prihvati izuzetke tipaint. - Rukovalac tipa
...prihvata sve tipove izuzetaka. - Rukovalac tipa
intmože da prihvati izuzetke tipadouble. - Izuzetak može da se baci iz
trybloka. - Izuzetak ne može da se baci iz
catchbloka.
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;
####
}
p++;*p = 1;p = &b;std::cout << p;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 ***?
y.b = 2;X::c = 5;y.a = 1;X::d = 3;y.d = 4;
5. zadatak
Šta od sledećeg važi za preklapanje operatora na programskom jeziku C++?
- Ukoliko je levi operand binarne operacije standardnog tipa mora se preklopiti kao metod odgovarajuće klase.
- Operator
[]se mora preklopiti kao globalna prijateljska funkcija. - Operator dodele se mora preklopiti kao nestatički metod klase.
- Operator
()se mora preklopiti kao nestatički metod klase. - 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++?
- Objekti izvedene klase sadrže bezimeni podobjekat osnovne klase.
- Preko objekata izvedene klase zaštićenim članovima osnovne klase se pristupa isto kao javnim članovima izvedene klase.
- Jezici koji podržavaju izvođenje se nazivaju objektno bazirani jezici.
- Modifikator
finalse koristi za klasu koja nije izvedena ni iz jedne klase. - 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;
}
- bxyz
- bxbyz
- byxz
- bybxz
- 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?
- 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. - Operator za dinamičku konverziju se mora primenjivati za svaku konverziju naviše (
upcast) koja se vrši u vreme izvršenja programa. - Operator za dinamičku konverziju se može primeniti na pokazivač ili referencu na objekat nepolimorfne osnovne klase.
- Operator za dinamičku konverziju primenjen na pokazivač tipa osnovne klase vraća
nullptrako konverzija u pokazivač tipa izvedene klase ne uspeva. - 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:
void m() noexcept;void m() throw ();void m() throw (I1, I2, I3);void m() throw (I1);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:
void K::m(T t) { ... }template <class T> void K<T>::m(T t) { ... }void K<T>::m(T t) { ... }