Fiszki

infa

Test w formie fiszek
Ilość pytań: 108 Rozwiązywany: 4174 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()
sizeof(txt)
size_t strlen ( const char * str ) strlen ( 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};
Niezgodna ze składnią języka
Zgodnie ze standardem C99 jest ona niepoprawn
Da ona taki sam efekt jak int t[]=1,2,0,0,1
W jaki sposób obliczyć długość tablicy w funkcji foo()? void foo (double [] t) { }
W tym wypadku nie jest możliwe obliczenie długości tablicy.
Po wykonaniu poniższej instrukcji długość tablicy będzie umieszczona w zmiennej len int len; for(len = 0; t[len]; len++);
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 tab [10]; return tab ; }
int∗getTable(int n) { return(int∗)malloc(n∗sizeof(int)); }
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;
sizeof(x) = 1 + padding(1) + 2 + 8 = 12
8+8+8=24
1+4+8=13
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 odpowiedź wypisze 8 printf ("%d\n" , p2−p1 );
Poniższa instrukcja wypisze zero : printf("% d \ n " , p2==p1 + 8 );
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:
Wyrażenie z==++z jest zawsze fałszywe dla zmiennej z typu int.
Operatory addytywne maja˛mniejszy priorytet niz multiplikatywn
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 [ ]) { / / . . . }
Cała zawartość tablicy kopiowana jest na stos i funkcja działa na kopii tablicy.
Na stosie umieszczany jest adres pierwszego elementu tablic
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:
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.
W konstuktorze wyrzucany jest wyjątek
Podczas inicjalizacji obiektu wystąpił błąd i konstruktor zwrócił wartość 0.
Brakuje pamięci wtedy mechanizm C++ rzuca wyjątkiem std::bad_alloc
W konstuktorze wyrzucany jest wyjątek
Przeanalizuj fragment kodu w języku C++, w którym pojawia się wywołanie operatora « A a ; std : : cout <
Jako funkcja niezwracająca wartości void operator <<(std :: ostream&os , const A&a){
Jako metoda klasy A niezwracająca wartości: class A{ public : void operator <<( std : : ostream&os) const ; } ;
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?
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 klasa która posiada domyślny konstruktor oraz przeciążony operator +=
Zeby mozna było wywołac szablon funkcji parametrem może być typem prostym
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 klasa która posiada domyślny konstruktor oraz przeciążony operator +=
Zeby mozna było wywołac szablon funkcji parametrem może być typem prostym
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 ( ) { v.clear ( ) ; }
B::~B(){ for ( std :: vector :: iterator i = v. begin (); i != v. end (); ++i ) delete *i ; }
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;
Typ string
Każdy typ, który ma przeładowany operator <
jeśli podamy przy tworzeniu kolekcji własny komperator setkolekcja;
Typ string
Każdy typ, który ma przeładowany operator <
Które ze stwierdzeń odnoszących się do konstruktorów kopiujących i operatorów przypisania w języku C++ są poprawne?
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.
Zarówno automatycznie wygenerowany konstruktor kopiujący, jak i operator przypisania kopiująobiekty bit po bicie.
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& operator ++(int );
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 );

Powiązane tematy

Inne tryby