Fiszki

infa

Test w formie fiszek
Ilość pytań: 108 Rozwiązywany: 4177 razy
W jaki sposób można obliczyć długość tekstu przekazanego jako argument w poniższej funkcji? void foo (const char*txt) { ... }
txt.length()
size_t strlen ( const char * str ) strlen ( txt )
sizeof(txt)
int length = 0; char c = *txt ; while (c != ’\0 ’) { length ++; c = *(++ txt ); }
size_t strlen ( const char * str ) strlen ( txt )
int length = 0; char c = *txt ; while (c != ’\0 ’) { length ++; c = *(++ txt ); }
Co możesz powiedzieć o poniższej deklaracji? int t [10] = {1,2,[4]=1};
Da ona taki sam efekt jak int t[]=1,2,0,0,1
Zgodnie ze standardem C99 jest ona niepoprawn
Niezgodna ze składnią języka
W jaki sposób obliczyć długość tablicy w funkcji foo()? void foo (double [] t) { }
Po wykonaniu poniższej instrukcji długość tablicy będzie umieszczona w zmiennej len int len; for(len = 0; t[len]; len++);
W tym wypadku nie jest możliwe obliczenie długości tablicy.
sizeof(t)/sizeof(t[0])
W tym wypadku nie jest możliwe obliczenie długości tablicy.
Która z implementacji funkcji zawierającej tablicę jest poprawna?
int∗getTable(int n) { return(int∗)malloc(n∗sizeof(int)); }
int* getTable () { int tab [10]; return tab ; }
int∗getTable(int n) { return(int∗)malloc(n∗sizeof(int)); }
Zakładając, że wielkość typu char to jeden bajt, short to dwa bajty, a double to osiem bajtów, jaka jest wartość wyrażenia sizeof(x), gdzie x jest zmienną poniższego typu strukturalnego, dla standardowych ustawień kompilatora 32-bitowego? struct{ char c; short i; double d; }x;
1+4+8=13
8+8+8=24
sizeof(x) = 1 + padding(1) + 2 + 8 = 12
sizeof(x) = 1 + padding(1) + 2 + 8 = 12
Przeanalizuj poniższą deklarację. Jakie wartości wyrażeń, w których występują wskaźniki p1 i p2 zostaną wydrukowane? (Załóż, że używasz 32-bitowego kompilatora.) int t [10]; int∗p1=&t [0]; int∗p2=&t [8];
Poniższa instrukcja wypisze zero : printf("% d \ n " , p2==p1 + 8 );
Poniższa odpowiedź wypisze 8 printf ("%d\n" , p2−p1 );
Poniższa odpowiedź wypisze 8 printf ("%d\n" , p2−p1 );
Przeanalizuj poniższą deklarację w języku C: int(∗x)(int,int);
Deklaracja jest niezgodna ze składnią języka
Deklaracja wskaźnika na funkcję przyjmującą jako parametr dwa integery i zwracająca inta
Deklaracja wskaźnika na funkcję przyjmującą jako parametr dwa integery i zwracająca inta
Które stwierdzenia dotyczące operatorów w języku C/C++ są poprawne:
Operatory addytywne maja˛mniejszy priorytet niz multiplikatywn
Wyrażenie z==++z jest zawsze fałszywe dla zmiennej z typu int.
Operatory addytywne maja˛mniejszy priorytet niz multiplikatywn
Które stwierdzenia dotyczące modyfikatora static w języku C/C++ są poprawne:
W metodzie poprzedzonej modyfikatorem static możemy używać wyłącznie zmiennych zadeklarowanych jako static.
Pole static klasy C++wymaga zadeklarowania zmiennej w analogiczny sposób, jak deklaruje się zmienne globalne wewnątrz modułów
W funkcji poprzedzonej modyfikatorem static możemy używać wyłącznie zmiennych zadeklarowanych jako static.
W metodzie poprzedzonej modyfikatorem static możemy używać wyłącznie zmiennych zadeklarowanych jako static.
Pole static klasy C++wymaga zadeklarowania zmiennej w analogiczny sposób, jak deklaruje się zmienne globalne wewnątrz modułów
Dzięki konwencji wywołania funkcji w języku C znanej jako __cdecl możliwa jest implementacja funkcji o zmiennej liczbie argumentów, jak printf(). Które stwierdzenia charakteryzujące funkcje typu __cdecl są prawdziwe?
W języku C kompilator może utworzyć kod wywołania funkcji typu __cdecl nie mając informacji o typach jej parametrów
W wygenrowanym kodzie wywołania funkcji argumenty umieszczane są na stosie od konca. Dzięki temu na szczycie stosu jest jej pierwszy argument i analizuja˛c jego zawarto´sc mo˙zna okre´sli´c spodziewana˛ liczbe˛ argumentów wywołania
W języku C kompilator może utworzyć kod wywołania funkcji typu __cdecl nie mając informacji o typach jej parametrów
W wygenrowanym kodzie wywołania funkcji argumenty umieszczane są na stosie od konca. Dzięki temu na szczycie stosu jest jej pierwszy argument i analizuja˛c jego zawarto´sc mo˙zna okre´sli´c spodziewana˛ liczbe˛ argumentów wywołania
W jaki sposób przekazywany jest parametr będący tablicą do funkcji w języku C, np.: int main(int argc , char ∗ argv [ ]) { / / . . . }
Na stosie umieszczany jest adres pierwszego elementu tablic
Cała zawartość tablicy kopiowana jest na stos i funkcja działa na kopii tablicy.
Na stosie umieszczany jest adres pierwszego elementu tablic
Które stwierdzenia odnoszące się do przydziału pamięci dla zmiennych w językach C i C++ są prawdziwe?
Pamięć dla wszystkich zmiennych przydzielana jest na stosie.
Przydział pamięci dla zmiennych deklarowanych z modyfikatorem static następuje przed rozpoczęciem wykonania programu
Przydział pamięci dla zmiennych deklarowanych z modyfikatorem static następuje przed rozpoczęciem wykonania programu
Które ze stwierdzeń odnoszących się do referencji w języku C++ są poprawne?
Poniższy kod inicjalizacji pola klasy typu referencyjnego jest poprawny class A { int&r; public : A(int&a) : r(a){ } } ;
Ponizszy kod w poprawny sposób przenosi referencje˛ z obiektu a na b: A a; A b; A&r = a; r = b ;
Poniższy kod inicjalizacji pola klasy typu referencyjnego jest poprawny class A { int&r; public : A(int&a) : r(a){ } } ;
Jeżeli podczas wykonania instrukcji w C++: A∗ ptr = new A ( ); wygenerowany został wyjątek, jego przyczyna może być następująca:
W konstuktorze wyrzucany jest wyjątek
Brakuje pamięci wtedy mechanizm C++ rzuca wyjątkiem std::bad_alloc
Klasa A jest klasa˛abstrakcyjna˛i nie można utworzyć obiektu tej klasy.
Podczas inicjalizacji obiektu wystąpił błąd i konstruktor zwrócił wartość 0.
W konstuktorze wyrzucany jest wyjątek
Brakuje pamięci wtedy mechanizm C++ rzuca wyjątkiem std::bad_alloc
Przeanalizuj fragment kodu w języku C++, w którym pojawia się wywołanie operatora « A a ; std : : cout <
Jako metoda klasy A niezwracająca wartości: class A{ public : void operator <<( std : : ostream&os) const ; } ;
Jako funkcja niezwracająca wartości void operator <<(std :: ostream&os , const A&a){
Zdefiniowano szablon (wzorzec) funkcji: template T suma ( T∗ table, int size) { T t =T () ; for ( int i = 0; i < size ; i ++ ) t += table [i] ; return t ; } Proces instancjacji szablonu polega na zastąpieniu typów i zmiennych będących parametrami szablonu konkretnymi typami i wartościami, a następnie generacji kodu wynikowego. Jakie założenia musi spełniać typ T, aby instancjacja szablonu była możliwa?
Zeby mozna było wywołac szablon funkcji parametrem może być typem prostym
Zeby mozna było wywołac szablon funkcji parametrem może klasa która posiada domyślny konstruktor oraz przeciążony operator +=
Typem T użytym podczas instancjacji szablonu może być typ wbudowany (int, char, float, double)
Zeby mozna było wywołac szablon funkcji parametrem może być typem prostym
Zeby mozna było wywołac szablon funkcji parametrem może klasa która posiada domyślny konstruktor oraz przeciążony operator +=
Typem T użytym podczas instancjacji szablonu może być typ wbudowany (int, char, float, double)
Klasa B przechowuje wskaźniki do obiektów klasy A w kontenerze vector standardowej biblioteki C++ (STL) class A{ . . . } ; class B{ public : std : : vector v ; void add (A&a ) { v . push_back ( new A( a ) ) ; } ~B ( ) ; } ; Która z implementacji destruktora jest poprawna (kompiluje się, nie prowadzi do błędów wykonania lub wycieków pamięci)?
B::~B(){ for ( std :: vector :: iterator i = v. begin (); i != v. end (); ++i ) delete *i ; }
B : : ~ B ( ) { v.clear ( ) ; }
Szablon set zdefiniowany w standardowej bibliotece C++ (STL) przechowuje elementy w drzewiastych strukturach danych. Który z przedstawionych typów danych może być zastosowany jako parametr instancjacji szablonu set?
jeśli podamy przy tworzeniu kolekcji własny komperator setkolekcja;
Każdy typ, który ma przeładowany operator <
Typ string
jeśli podamy przy tworzeniu kolekcji własny komperator setkolekcja;
Każdy typ, który ma przeładowany operator <
Typ string
Które ze stwierdzeń odnoszących się do konstruktorów kopiujących i operatorów przypisania w języku C++ są poprawne?
Zarówno automatycznie wygenerowany konstruktor kopiujący, jak i operator przypisania kopiująobiekty bit po bicie.
Publiczny konstruktor kopiujący oraz operator przypisania zostaną automatycznie wygenerowane przez kompilator, jeśli programista je pominie.
Standardowa implementacja (automatycznie wygenerowana przez kompilator) konstruktora kopiującego C++ kopiuje kolejne bajty składające się na pamięć obiektu.
Zarówno automatycznie wygenerowany konstruktor kopiujący, jak i operator przypisania kopiująobiekty bit po bicie.
Publiczny konstruktor kopiujący oraz operator przypisania zostaną automatycznie wygenerowane przez kompilator, jeśli programista je pominie.
Standardowa implementacja (automatycznie wygenerowana przez kompilator) konstruktora kopiującego C++ kopiuje kolejne bajty składające się na pamięć obiektu.
Implementacja przeciążonych operatorów C++ powinna odzwierciedlać semantykę operacji na typach wbudowanych. Biorąc pod uwagę to wymaganie, które z implementacji operatorów dla klasy X zadeklarowanej poniżej jest poprawna? class X { friend X&operator += (X&a ,const X&b ) ; int x ; public : X(int _x = 0 ) : x ( _x) { } X&operator + (const X&o ) ; X&operator ++ (int) ; X&operator −=(const X&o) ; } ;
X&X : : operator −=(const X&o ) {X ret =∗ this; ret.x−=o.x ; return ret ; }
X& operator −=(const X&o );
X& operator ++(int );
X& operator −=(const X&o );
X& operator ++(int );

Powiązane tematy

Inne tryby