Prawda
Fałsz
Komentarz
OpisProblemu ====================================================
Dany jest nastepujacy fragment kodu:
#include <iostream>
using namespace std;
ostream strumien1, strumien2;
int main()
{
strumien1 = strumien2 = cout;
strumien1 << " Napis1 ";
strumien2 << " Napis2 " << endl;
return 0;
}
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 1
... na wyjsciu standardowym pojawi sie napis:
Napis1 Napis2
KoniecOpisu
OpisPytania 2
... nic sie nie pojawi, gdyz program zawiera blad.
KoniecOpisu
OpisPytania 3
... nic sie nie pojawi, gdyz dla strumieni operacja przypisania
nie jest dozwolona.
KoniecOpisu
patrz tu:http://en.allexperts.com/q/C-1040/fstream-class-member.htm
OpisPytania 4
... nic sie nie pojawi, gdyz wielokrotne przypisywanie dla strumieni
nie jest mozliwe. Nalezaloby to rozwiazac za pomoca pojedynczych
przypisan, tj.
strumien1 = cout; strumien2 = cout;
KoniecOpisu
OpisProblemu ====================================================
Dany jest nastepujacy fragment kodu:
#include <iostream>
using namespace std;
ostream &strumien1 = cout, &strumien2 = strumien1;
int main()
{
strumien1 << " Napis1 ";
strumien2 << " Napis2 " << endl;
}
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 5
... na wyjsciu standardowym pojawi sie napis:
Napis1 Napis2
KoniecOpisu
OpisPytania 6
... na wyjsciu standardowym pojawi sie napis:
Napis1 Napis2
Jednak program moze spowodowac blad wykonania,
gdyz operacje tego typu nie sa dozwolone.
KoniecOpisu
OpisPytania 7
... moze powstac blad, aczkolwiek nie musi,
gdyz "strumien2" jest referencja do referencji.
KoniecOpisu
OpisPytania 8
... operujac na zmiennych referencyjnych "strumien1" i "strumien2",
wykonujemy operacje na strumieniu wyjscia standardowego reprezentowanym
przez obiekt "cout".
KoniecOpisu
OpisProblemu ====================================================
Dany jest nastepujacy fragment kodu:
#include <iostream>
using namespace std;
class KlasaA {
public:
virtual void Wyswietl() { cout << " KlasaA" << endl; }
};
class KlasaB: public KlasaA {
public:
virtual void Wyswietl() { cout << " KlasaB" << endl; }
};
int main()
{
KlasaB *wObiektB = new KlasaB;
KlasaA *wObiektA = wObiektB;
wObiektA->Wyswietl();
}
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 9
... w programie wystepuje niezgodnosci typow w podstawieniu:
KlasaA *wObiektA = wObiektB;
W tym przypadku nie jest mozliwe domyslne rzutowanie w gore.
KoniecOpisu
OpisPytania 10
... na ekranie pokaze sie napis:
KlasaB
Jest to wynik dzialania metody "Wyswietl" z klasy "KlasaB".
KoniecOpisu
OpisPytania 11
... ponizsze podstawienie moze spowodowac blad.
KlasaA *wObiektA = wObiektB;
Powodem jest wystepowanie metod wirtualnych w definicjach klas.
KoniecOpisu
OpisPytania 12
... obiekt klasy "KlasaB" zawiera w sobie obiekt klasy "KlasaA".
KoniecOpisu
OpisPytania 13
... domyslne destruktory dla klas "KlasaA" i "KlasaB" nie sa
destruktorami wirtualnymi.
KoniecOpisu
OpisProblemu ====================================================
Dany jest nastepujacy fragment kodu:
#include <iostream>
using namespace std;
class KlasaA {
public:
virtual ~KlasaA() {}
};
class KlasaB: public KlasaA {
public:
~KlasaB() {}
};
int main()
{
KlasaB *wObiektB = new KlasaB;
KlasaA *wObiektA = wObiektB;
delete wObiektA;
}
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 14
... zapis programu jest prawidlowy i destrukcja obiektu przebiegnie wlasciwie.
W tym przypadku brak slowa kluczowe "virtual" przed destruktorem klasy "KlasaB"
nie ma zadnego znaczenia.
KoniecOpisu
OpisPytania 15
... sam zapis programu jest prawidlowy. Jednak uruchomienie programu moze
powodowac bledne dzialanie programu. Aby temu zapobiec nalezaloby zmienic
linie:
KlasaA *wObiektA = wObiektB;
na linie:
KlasaA *wObiektA = static_cast<KlasaA*>(wObiektB);
KoniecOpisu
OpisPytania 16
... destruktor klasy "KlasaB" jest jest destruktorem wirtualnym mimo
braku slowa kluczowego "virtual".
KoniecOpisu <- „W klasie pochodnej nie jest konieczne uzywanie modyfikatora virtual do zdefiniowania metody wirtualnej. Wystarczy, ze metoda ta z modyfikatorem virtual została zdefiniowana w klasie bazowej. Kazda nastepna definicja w klasach pochodnych automatycznie uznawana jest jako definicja metody wirtualnej.” (polimorfizm.pdf str 8)
OpisPytania 17
... w programie w linii:
KlasaA *wObiektA = wObiektB;
zachodzi domyslne rzutowanie "w gore". Jest ono mozliwe tylko i wylacznie
dzieki temu, ze klasa "KlasaA" posiada destruktor wirtualny.
KoniecOpisu
OpisProblemu ====================================================
Dany jest nastepujacy fragment kodu:
#include <iostream>
using namespace std;
class KlasaA {
};
class KlasaB: public KlasaA {
};
int main()
{
KlasaA *wObiektA = new KlasaB;
KlasaB *wObiektB = wObiektA;
return 0;
}
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 18
... w programie w linii:
KlasaB *wObiektB = wObiektA;
wystepuje niedozwolona proba rzutowania "w dol" (na nadklase).
KoniecOpisu
OpisPytania 19
... w programie w linii
KlasaB *wObiektB = wObiektA;
wystepuje rzutowanie "w dol" (na nadklase), ktore bedzie poprawne jesli
zastosowany zostanie operator jawnego rzutowania w postaci:
KlasaB *wObiektB = static_cast<KlasaB*>(wObiektA);
KoniecOpisu <- „19 <- coz, za kryterium poprawnosci przyjete zostalo skompilowanie sie. Tutaj warningi moga byc wyrzucone (a nawet powinny!), co nie oznacza, ze niepoprawny jest ten kod i, co za tym idzie, nie skompiluje sie. TRUE - Piłat na forum :))
OpisPytania 20
... w programie w linii:
KlasaB *wObiektB = wObiektA;
rzutowanie "w dol" (na nadklase) byloby poprawne, gdyby zostal
w odpowiedni sposob zdefiniowany wirtualny destruktor w klasie "KlasaA".
KoniecOpisu <- kompilator mowi ze nie, ale możliwe ze cos źle wpisałem
OpisPytania 21
... w programie w linii:
KlasaA *wObiektA = new KlasaB;
nie ma bledu zapisu polecenia. Jednak wykonanie tej operacji moze powodowac
(aczkolwiek nie zawsze musi) blad i przerwanie dzialania programu w momencie
wykonania tej instrukcji.
KoniecOpisu <- szczerze to za bardzo nie wiem, ale wydaje mi się, ze w samym momencie wykonywania tej instrukcji nie będzie zadnych prblemow, ewentualnie, pozniej ze względu na brak wirtualnych destruktorow, gdybyśmy napisali: delete wObiektA;
OpisProblemu ====================================================
Dany jest nastepujacy fragment kodu:
#include <iostream>
using namespace std;
class KlasaA {
public:
void Wyswietl() { cout << " KlasaA" << endl; }
};
class KlasaB: public KlasaA {
public:
virtual void Wyswietl() { cout << " KlasaB" << endl; }
};
int main()
{
KlasaA *wObiektA = new KlasaB;
wObiektA->Wyswietl();
return 0;
}
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 22
... wykonana zostanie metoda z klasy "KlasaA". Jest ona metoda
wirtualna, co wynika z definicji metody o tej samej nazwie
w klasie "KlasaB".
KoniecOpisu <- gdyby było na odrot o tej wirtualnosci to by było dobrze. Tak przynajmniej wnioskuje z tego co wypisane jest pod pytaniem 16.
OpisPytania 23
... wykona sie metoda z klasy "KlasaA". Aby uruchomic metode z klasy
"KlasaB" nalezaloby najpierw dokonac rzutowania w dol (na nadklase),
tzn.
static_cast<KlasaB*>(wObiektA)->Wyswietl();
KoniecOpisu <- kompilator
OpisProblemu ====================================================
Dany jest nastepujacy fragment kodu:
#include <iostream>
using namespace std;
class KlasaA { int _PoleA; };
class KlasaB: public KlasaA { int _PoleB; };
int main()
{
KlasaB *wObiektB = new KlasaB;
KlasaA *wObiektA = wObiektB;
if (wObiektA == wObiektB) cout << "Rownosc nr 1" << endl;
}
Powyzszy kod jest poprawny pod wzgledem skladni i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 24
... operacja porownania wskaznikow jest poprawna. Regula ta obejmuje wszystkie
przypadki tego typu niezaleznie od zlozonosci wewnetrznej struktury obiektu
i podobiektu.
KoniecOpisu <- adresy chyba można porównywać i nic w tym zlego nie ma…
OpisPytania 25
... operacja ta da wlasciwy wynik tylko i wylacznie wtedy, gdy w klasach
beda zdefiniowane destruktory wirtualne.
KoniecOpisu <- nie ma destruktorow wirtualnych, a wynik jest przewidywalny i wiadomo co z tego wyjdzie
OpisPytania 26
... w tym przypadku zachodzi rownosc tylko i wylacznie ze wzgledu
na to, ze klasa "KlasaA" jest bezposrednio dziedziczona przez
klase "KlasaB".
KoniecOpisu rownosc zachodzi, ale nie tylko ze wzgledu na bezposrednie dziedziczenie. Zalozmy ze mamy jeszcze "KlaseC" ktora takze jest dziedziczona bezposrednio przez "KlasaB". Po wykonaniu 'KlasaC *wObiektC = wObiektB', okaze sie, ze rownosci miedzy adresami 'wObiektC == wObiektB' nie bedzie. (Przyklad z wykladu) FALSE
OpisPytania 27
... operacja porownania powoduje niejawne rzutowanie zawartosci zmiennej
wskaznikowej "wObiektB" na wskaznik typu: KlasaA*
KoniecOpisu <- chyba zawartość tu za bardzo nie ma znaczenia
OpisPytania 28
... w programie wykorzystane jest domyslne rzutowanie wskaznikow.
W tym przypadku domyslne rzutowanie nie jest zwiazana z hierarchia
dziedziczenia klas.
KoniecOpisu <- jest związane z hierarchia
OpisProblemu ====================================================
Dany jest fragment kodu:
vector<double> Tab(5);
double &Zm = Tab[1];
Tab.push_back(10);
Zm = Tab[5];
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 29
... po wykonaniu tego kodu zawsze zachodzi warunek:
Zm == 10
Nalezy jednak zwrocic uwage, ze konstrukcja nie jest
poprawna, gdyz poprzez zmienna "Zm" moze byc mozliwe
odwolanie sie do niewlasciwego obszaru pamieci.
KoniecOpisu nastepuje realokacja vectora, po ktorej nie wiadomo na jaki obszar pamieci wskazuje Zm, i moze to powodowac odwolanie sie do niewlasciwego obszaru pamieci. TRUE
OpisPytania 30
... po wykonaniu tego kodu zawsze zachodzi warunek:
Tab[1] == Tab[5]
KoniecOpisu <- prawie nigdy nie zachodzi
OpisProblemu ====================================================
Dany jest fragment kodu:
vector<double> Tab(5);
double &Zm = Tab[1];
Tab.push_back(10);
Zm = Tab[5];
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 31
... po wykonaniu tego kodu zawsze zachodzi warunek:
&Zm == &Tab[1]
KoniecOpisu <- o tym była mowa przy pytaniu 29
OpisPytania 32
... po wykonaniu tego kodu zawsze zachodzi warunek:
Zm == Tab[1]
KoniecOpisu <- j.w.
OpisProblemu ====================================================
Niech dany bedzie fragment kodu:
list< vector< double> > Lst(5);
Lst.back()[1] = 5;
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 33
... w podstawieniu w drugiej linii nastepuje proba modyfikacji
drugiej skladowej wektora, ktory jest piatym elementem listy?
KoniecOpisu <- na to wyglada, ale tez może być tu jakis haczyk // Haczyk taki ze to jest niedozwolona operacja (no ale napisane jest proba,a to ze nieudana...)
OpisPytania 34
... wszystkie wektory wchodzace w sklad utworzonej listy maja
rozmiar zerowy (tzn. metoda size() w ich przypadku zwraca 0).
KoniecOpisu <- kompilator
OpisProblemu ====================================================
Niech dany bedzie fragment kodu:
list< vector< double> > Lst(5);
Lst.back()[1] = 5;
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 35
... wykonane podstawienie spowoduje utworzenie drugiej skladowej
w ostatnim wektorze listy 'Lst'.
KoniecOpisu <- czy skoro size zwraca 0 to tworzona jest druga skladowa? W sensie, ze nie wiem, ale obstawiam, ze nie // Nie, w taki sposob nie można zmieniac rozmiaru wektora
OpisPytania 36
... zmienna 'Lst' reprezentuje liste wektorow, ktore maja
po piec skladowych.
KoniecOpisu
OpisProblemu ====================================================
Dany jest program:
struct Wektor2f {
float _x, _y;
Wektor2f(float w): _x(w), _y(w) {}
operator float () const { return _x*_x + _y*_y; }
};
int main()
{
Wektor2f Wek = 1;
float Liczba;
Liczba = 2 + Wek * 2;
}
Jest on prawidlowy pod wzgledem skladni.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 37
... po wykonaniu ostatniego dzialania zmienna 'Liczba' zawierac
bedzie wartosc 10.
KoniecOpisu <- kompilator mowi ze 6
OpisPytania 38
... w trakcie realizacji ostatniego dzialania w funkcji main,
tzn. operacji: Liczba = 2 + Wek * 2;
nastepuje niejawna konwersja obiektu 'Wek' do zmiennej tymczasowej
typu float.
KoniecOpisu
OpisPytania 39
... w tym przypadku zapis: Wektor2f Wek = 1;
jest identyczny z zapisem: Wektor2f Wek(1);
gdyz w obu przypadkach nastepuje wywolanie jedynie
konstruktora klasy 'Wektor2f'.
KoniecOpisu
OpisPytania 40
... w funkcji 'main' wystepuje jedno niejawne wywolanie
konstruktora klasy 'Wektor2f' oraz jedna niejawna konwersja
obiektu klasy 'Wektor2f' do zmiennej typu float.
KoniecOpisu
OpisProblemu ====================================================
Niech dany bedzie fragment kodu:
list <vector< double> > Lst(5);
vector<double> TabWekt[4] = { vector<double>(5), vector<double>(4) };
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 41
... po wykonaniu tego kodu prawdziwy bedzie warunek:
TabWekt[2].size() == TabWekt[3].size()
KoniecOpisu
OpisPytania 42
... po wykonaniu tego kodu prawdziwy bedzie warunek:
TabWekt[0].size() == TabWekt[3].size[3]()
KoniecOpisu <- tak czy siak, albo program się nie skompiluje (przeszkadza [3] po size), albo i tak będzie nieprawdziwy
OpisProblemu ====================================================
Niech dany bedzie fragment kodu:
list <vector< double> > Lst(5);
vector<double> TabWekt[4] = { vector<double>(5), vector<double>(4) };
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 43
... po wykonaniu tego kodu prawdziwy bedzie warunek:
TabWekt[0].size() == Lst.size()
KoniecOpisu
OpisPytania 44
... po wykonaniu tego kodu prawdziwy bedzie warunek:
TabWekt[3].size() == Lst.size()
KoniecOpisu
OpisProblemu ====================================================
Niech dany bedzie fragment kodu:
vector<double> Wekt(4);
double *wskA = &*Wekt.begin();
double *wskB = &*Wekt.end();
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 45
... wskaznik "wskA" zawiera adres pierwszego elementu
z tablicy dostepnej poprzez obiekt "Wekt"?
KoniecOpisu
OpisPytania46
... wskaznik "wskB" zawiera adres ostatniego elementu
z tablicy dostepnej poprzez obiekt "Wekt"?
KoniecOpisu <- wskazuje jeden za ostatnim
OpisProblemu ====================================================
Niech dany bedzie fragment kodu:
list<double> Lst(4);
double *wskA = &Lst.front();
Lst.push_back(10);
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 47
... do drugiego elementu listy mozna odwolac sie w nastepujacy sposob:
*++Lst.begin();
KoniecOpisu
OpisPytania 48
... wywolanie metody "push_back" spowoduje realokacje pamieci dla
calej listy i dlatego po jej wykonaniu adres w zmiennej "wskA"
moze juz nie byc adresem pierwszego elementu?
KoniecOpisu <- dla listy jest inaczej niż dla vectora
OpisProblemu ====================================================
Niech dany bedzie fragment kodu:
class KlasaBazowa { };
class KlasaPochodna: public KlasaBazowa { };
void funkcja(const KlasaBazowa &) { }
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 49
... ponizej zaprezentowane wywolanie funkcji jest prawidlowe?
funkcja( KlasaPochodna() );
KoniecOpisu
OpisPytania 50
... ponizej zaprezentowane wywolanie funkcji jest prawidlowe?
funkcja( new KlasaPochodna() );
KoniecOpisu
OpisProblemu ====================================================
Niech dany bedzie fragment kodu:
class KlasaBazowa { };
class KlasaPochodna: public KlasaBazowa { };
void funkcja(const KlasaPochodna &) { }
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 51
... ponizej zaprezentowane wywolanie funkcji jest prawidlowe?
funkcja( * (KlasaBazowa*) &KlasaPochodna() );
KoniecOpisu
OpisPytania 52
... ponizej zaprezentowane wywolanie funkcji jest prawidlowe?
funkcja( KlasaBazowa() );
KoniecOpisu
OpisProblemu ====================================================
Niech dany bedzie fragment kodu:
struct KlasaA {
int _PoleA;
KlasaA(int Wart) { _PoleA = Wart; }
};
struct KlasaB {
KlasaA _PoleKlasyA;
KlasaB();
};
Zakladamy, ze powyzszy kod jest umieszczony we wlasciwym
kontekscie i kompiluje sie bez zadnych ostrzezen.
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 53
... ponizsza implementacja konstruktora klasy "KlasaB"
wymusi uruchomienie konstruktora klasy "KlasaA" z parametrem
o wartosci 10 w celu wlasciwego zainicjalizowania pola "_PoleKlasyA"?
KlasaB::KlasaB(): _PoleKlasyA(10)
{ }
KoniecOpisu
OpisPytania 54
... ponizsza implementacja konstruktora klasy "KlasaB"
wymusi uruchomienie konstruktora klasy "KlasaA" z parametrem
o wartosci 10 w celu wlasciwego zainicjalizowania pola "_PoleKlasyA"?
KlasaB::KlasaB(): KlasaA(10)
{ }
KoniecOpisu
OpisProblemu ====================================================
Dana jest nastepujaca deklaracja zmiennych:
int kk, &ll=kk, &mm=ll;
KoniecOpisu
OpisPytania 55
Czy po wykonaniu nastepujacych operacji:
kk=2;
ll=5;
mm=7;
zmienna kk bedzie miala wartosc 7 ?
KoniecOpisu <- mm i ll to zwyczajnie inne nazwy kk
OpisPytania 56
Czy spelniony jest ponizszy warunek?
&kk == &mm
KoniecOpisu
OpisProblemu ====================================================
Nastepne pytanie dotyczyc bedzie referencji i zmiennych referencyjnych:
KoniecOpisu
OpisPytania 57
Czy poprawne jest stwierdzenie:
Przekazywanie parametru funkcji przez referencje
polega na tym, ze do funkcji przekazywany jest parametr
aktualny, a nie tylko jego wartosc.
Dzieki temu zmiany wartosci parametru w funkcji sa widziane
rowniez na "zewnatrz" tej funkcji.
KoniecOpisu
OpisPytania 58
Czy poprawne jest stwierdzenie:
Jako wynik funkcji wolno przekazywac referencje do
zmiennych lokalnych tej funkcji, poniewaz zmienne te
istnieje caly czas podczas dzialania danej funkcji.
KoniecOpisu <- „Zwracanie przez funkcje referencji do obiektu ma sens w przypadku, gdy obiekt istnieje przed wywołaniem funkcji lub jest tworzony w niej w sposób dynamiczny.” (referencje-prez.pdf str 15); „Błedem jest zwracanie referencji do obiektów tworzonych lokalnie.” (referencje-prez.pdf str 16)
OpisProblemu ====================================================
Pytanie dotyczyc bedzie przeciazania funkcji i metod.
KoniecOpisu
OpisPytania 59
Czy funkcje przeciazone to funkcje majace wspolna sama nazwe
(przy czym wielkosc liter jest nieistotna), lecz rozniace sie
np. liczba parametrow lub typami parametrow?
KoniecOpisu <- wielkość liter jest istotna, chyba ze to co jest w nawiasie jest zalozeniem…
OpisPytania 60
Czy prawdziwe jest stwierdzenie, ze w jezyku C++ mozna przeciazac
funkcje, a nie mozna przeciazac operatorow arytmetycznych
poza obrebem (definicji) danej klasy?
KoniecOpisu
OpisPytania 61
Czy poprawna jest nastepujaca definicja przeciazenia
operatora przesuniecia bitowego dla strumienia wyjsciowego.
std::ostream &operator << ( std::ostream &strumien1, std::ostream &strumien2 )
{
return strumien2;
}
KoniecOpisu <- co to jest przesuniecie bitowe dla strumienia wujsciwego? Nie mam pojecia o co tu chodzi //przesuniecie to po prostu nazwa przeciazonego operatora << i ta definicja jest poprawna
OpisProblemu ====================================================
Pytanie dotyczyc bedzie hermetyzacji danych i metod
oraz funkcji zaprzyjaznionych
KoniecOpisu
OpisPytania 62
Czy hermetyzacja komponentow klasy (pol lub metod) ma na
celu zabezpieczenie ich przed modyfikacja lub wywolaniem przez
inne metody tej samej klasy?
KoniecOpisu
OpisPytania 63
Czy metody prywatne (private) i chronione (protected) klasy
dostepne sa dla funkcji zaprzyjaznionych z dana klasa?
KoniecOpisu
OpisPytania 64
Czy dozwolona jest modyfikacja pol prywatnych danej
klasy w funkcjach zaprzyjaznionych z dana klasa?
KoniecOpisu
OpisProblemu ====================================================
Pytanie dotyczyc bedzie konstruktorow i destruktorow.
KoniecOpisu
OpisPytania 65
Czy prawdziwe jest ponizsze stwierdzenie:
Jezeli dla klasy "KlasaA" nie zostal zdefiniowany zaden
konstruktor, to przy deklarowaniu w programie glownym
zmiennej danej klasy, np.:
KlasaA ObiektA;
zostanie wywolany domyslny konstruktor kopiujacy?
KoniecOpisu <- zostanie wywolany domyślny bezparametryczny konstuktor
OpisPytania 66
Czy jedna z operacji powodujacej niejawne wywolanie
konstruktora danej klasy jest dynamiczna alokacja
obiektu tejze klasy za pomoca operatora "new" ?
KoniecOpisu <- chyba to jest jawne wywolanie konstruktora
//ja dalbym tutaj TRUE - http://en.wikipedia.org/wiki/New_(C%2B%2B)
OpisPytania 67
Czy destruktory sa zawsze wywolywane niejawnie w przypadku
dla zmiennych statycznych, gdy sterowanie osiagnie koniec
zakresu waznosci deklaracji danego obiektu.
KoniecOpisu <- zmienna statyczna dotyczy klasy, a nie pojedynczych obiektow
OpisProblemu ====================================================
Pytanie dotyczyc bedzie konstruktorow i destruktorow.
KoniecOpisu
OpisPytania 68
Czy prawda jest, ze:
Destruktor powinien miec taka sama
liste parametrow w wywolaniu jak konstruktor.
KoniecOpisu
OpisPytania 69
Niech bedzie dana definicja klasy:
class LZespolona {
private:
double _re, _im;
public:
LZespolona() { _re = _im = 0;}
};
Czy klasa ta zawiera konstruktor kopiujacy (jawny lub niejawny, o ile
taki moze istniec w tym przypadku).
KoniecOpisu
OpisProblemu ====================================================
Czy konstruktor ...
KoniecOpisu
OpisPytania 70
... jest metoda skladowa klasy, ktora
zawsze inicjalizuje pola tej klasy?
KoniecOpisu <- chyba nie zawsze; dla przykładu pusty konstyktor
OpisPytania 71
... ma taka sama nazwe jak nazwa klasy i
moze byc wywolany jawnie jak kazda metoda.
KoniecOpisu <- teraz pytanie co to znaczy, ze może być wywolany jawnie jak kazda metoda. Dla przykładu:
klasa obiekt;
obiekt = klasa();
wszystko będzie dobrze, ale już dla obiekt.klasa() nie będzie.
OpisPytania 72
... moze byc zadeklarowany w ponizszy sposob:
class Klasa {
Klasa(Klasa);
public:
};
KoniecOpisu
OpisProblemu ====================================================
Czy przciazanie metod klasy ...
KoniecOpisu
OpisPytania 73
... jest mozliwe tylko poza sekcja chroniona (protected) danej klasy.
KoniecOpisu
OpisPytania 74
... jest zabronione w przypadku destruktora.
KoniecOpisu <- sprawdzałem kompilatorem nawet i wyglada na to ze nie można //Na 100% nie można - http://wwwhome.math.utwente.nl/~bella/docs/c++-faq/dtors.html
OpisPytania 75
... wykorzystujace argumenty domyslne moze prowadzic
do niejednoznacznosci, tzn. z zapisu wywolania metody
bez znajomosci wartosci argumentow domyslnych nie
bedzie mozna stwierdzic, ktora metoda bedzie wywolana?
Pytanie dotyczy definicji w programie, ktory kompiluje sie
poprawnie i nie wystepuja zadne ostrzezenia.
KoniecOpisu <- oczywiste jest to, ze taki program się nie skompiluje, ale uwzględniając zalozenie(no wlasnie, to zalozenie jest?) nie będzie wiadomo, o ktora metode chodzi
OpisProblemu ====================================================
Niech bedzie dana definicja:
int numer::funkcja(int i)
{
...
}
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 76
... moze to byc definicja metody dla klasy lub struktury lub unii
lub tez unii o nazwie "numer"?
KoniecOpisu
OpisPytania 77
jezeli jest to metoda klasy "numer", to jej definicja
jest umieszczona na pewno poza blokiem definicji tej klasy?
KoniecOpisu <- kompilator nie wykazuje zadnych błędów, czyli okazuje się ze może to być wewnątrz bloku definicji klasy
OpisProblemu ====================================================
Mamy zdefiniowana klase "KlasaA" i jej klase pochodna
"KlasaB":
class KlasaA {
int _Pole;
public:
KlasaA(int a) { _Pole = a; };
};
class KlasaB : public KlasaA {
public:
int Oblicz();
};
Czy prawda jest, ze ...
KlasaB ob(2);
KoniecOpisu
OpisPytania 78
... Obiekt 'ob' nie bedzie mogl byc utworzony ze wzgledu na brak
konstruktora parametrycznego?
KoniecOpisu <<- no nie utworzy sie,miedzy innymi , ze wzgledu na brak konstruktora parametrycznego, a to ze kod sie nie skompiluje to juz zupelnie inna bajka. TRUE
OpisPytania 79
... zapis jest poprawny i dziedziczone pole '_Pole'
zostanie zainicjalizowane wartoscia 2?
KoniecOpisu
OpisPytania 80
... zapis jest poprawny, jednak pole o nazwie "_Pole" klasy "KlasaA"
nie bedzie dostepne z poziomu klasy pochodnej ("KlasaB")?
KoniecOpisu
OpisProblemu ====================================================
Mamy zdefiniowana klase "KlasaA" oraz zdeklarowany jest obiekt Ob:
class KlasaA {
public:
int _Pole;
};
const KlasaA Ob;
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 81
... powyzsza deklaracja obiektu 'Ob' bylaby poprawna, gdyby
w klasie zostal zadeklarowany konstruktor bezparametryczny,
np.
class KlasaA {
public:
int _Pole;
KlasaA() {}
};
KoniecOpisu
OpisPytania 82
... obiekt nie jest inicjalizowany, tak wiec nie moze byc
zadeklarowany jako staly.
KoniecOpisu <- „Brak inicjalizacji obiektu stałego wykrywany jest przez kompilator.” (03-referencje.pdf slajd 112)
OpisPytania 83
... powyzsza deklaracja obiektu 'Ob' bylaby poprawna, gdyby
w klasie zostal zadeklarowany konstruktor postaci:
class KlasaA {
public:
int _Pole;
KlasaA(int Wartosc) { _Pole = Wartosc; }
};
KoniecOpisu <- gdyby dodalo sie parametr podczas tworzenia obiektu, to i owszem, ale nie jest podany
OpisPytania 84
... powyzsza deklaracja obiektu 'Ob' bylaby poprawna, gdyby
pole '_Pole' zostalo zadeklarowane jako statyczne,
tzn.:
class KlasaA {
public:
static int _Pole;
};
KoniecOpisu <- nadal brakuje konstruktora
OpisPytania 85
... bylaby poprawna jesli odpowiednia instrukcja zainicjalizuje sie
obiekt po jego utworzeniu.
KoniecOpisu <- nie utworzy się nawet, czyli nie będzie czego inicjowac
OpisProblemu ====================================================
Mamy zdefiniowana klase "KlasaA" oraz zdeklarowany jest obiekt Ob:
class KlasaA {
public:
int _Pole;
static int _PoleStatyczne;
};
int KlasaA::_PoleStatyczne = 0;
int main()
{
const KlasaA Ob;
Ob._Pole = 1;
Ob._PoleStatyczne = 4;
}
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 86
... ze wzgledu na to, iz obiekt 'Ob' jest zadeklarowny jako staly,
to obie operacje przypisania w funkcji 'main' sa niepoprawne.
KoniecOpisu <- i znowu dylemat, bo ze wzgldu na to, ze nie ma konstruktora program się nie skompiluje, ale ze wzgledu na to, iz obiekt 'Ob' jest zadeklarowny jako staly tylko pierwsza operacja przypisania nie będzie poprawna
OpisPytania 87
... obie operacje przypisania wartosci polu '_Pole' mozna zrealizowac
pod warunkiem wykonania rzutowania za pomoca operatora static_cast.
KoniecOpisu <- za pomoca operatora const_cast to i owszem, nawet na dwa sposoby (03-referencja.pdf slajdy 120-122), ale za pomoca static_cast już nie.
OpisPytania 88
... operacja zmiany wartosci pola statycznego moze byc wykonana
zawsze niezaleznie od tego czy obiekt jest staly czy nie.
Jedynym warunkiem jest dostepnosc tego pola.
KoniecOpisu
OpisProblemu ====================================================
Mamy zdefiniowana klase "KlasaA" oraz zdeklarowany jest obiekt Ob:
class KlasaA {
public:
int _Pole;
};
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 89
... ma zdefiniowane domyslne jeden konstruktor. Jest nim konstruktor
bezparametryczny.
KoniecOpisu <- ma zdefiniowane domyślne dwa konstruktory: bezparametryczny i kopiujący
OpisPytania 90
... ma zdefiniowane co najmniej trzy konstruktory.
KoniecOpisu <- j.w.
OpisPytania 91
... ma zdefiniowane co najmniej dwa konstruktory.
KoniecOpisu <- `co najmniej' nie oznacza, ze koniecznie musi ich być wiecej. prawda?
OpisPytania 92
... ma zdefiniowany konstruktor bezparametryczny.
KoniecOpisu <- domyślny, ale ma
OpisProblemu ====================================================
Mamy zdefiniowana klase "KlasaA" oraz zdeklarowany jest obiekt Ob:
class KlasaA {
public:
int _Pole;
};
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 93
... w tej klasie nie ma zdefiniowanego zadnego konstruktora,
z tego powodu nie ma rowniez konstruktorow domyslnych.
KoniecOpisu
OpisPytania 94
... w tej klasie istnieja co najmniej trzy konstruktory domyslne.
KoniecOpisu
OpisPytania 95
... w tej klasie istnieje konstruktor domyslny odpowiedzialny za
kopiowanie obiektu.
KoniecOpisu
OpisPytania 96
... mozna utworzyc obiekt tej klasy wywolujac konstruktor
bezparametryczny.
KoniecOpisu <- tak mi się przynajmniej wydaje, bo przy tworzeniu obiektu, wywola się chyba domyślny bezparametryczny konstruktor, ewentualnie można tak:
KlasaA obj = KlasaA();//kompilator mowi tak :)
OpisProblemu ====================================================
Mamy zdefiniowana klase "KlasaA" oraz zdeklarowany jest obiekt Ob:
class KlasaA {
public:
int _Pole;
KlasaA(): _Pole() {}
};
Czy prawda jest, ze ...
KoniecOpisu
OpisPytania 97
... w tej klasie zdefiniowanie konstruktora bezparametrycznego powoduje
uniewaznienie domyslnego konstruktora kopiujacego.
KoniecOpisu
OpisPytania 98
... w tej klasie po utworzeniu obiektu pole "_Pole" bedzie mialo na ogol
wartosc 0. Nie jest jednak zagwarantowane, ze tak bedzie w kazdym przypadku.
W przypadku konstruktora kopiujacego tak juz byc nie musi.
KoniecOpisu
OpisPytania 99
... w tej klasie po utworzeniu obiektu pole "_Pole" bedzie mialo wartosc 0
po kazdorazowym utworzeniu obiektu z wykorzystaniem konstruktora
bezparametrycznego.
KoniecOpisu <- wydaje się ze tak, ale czy na pewno?//kompilator znow na tak :)
OpisPytania 100
... w tej klasie oprocz zdefiniowanego konstruktora bezparametrycznego
istnieja jeszcze co najmniej dwa domyslne konstruktory.
KoniecOpisu <- jedyny domyślny teraz to kopiujący, bezparametryczny zostal przedefiniowany i teraz juz nie jest domyslny