Ga naar pollev.com/woutergroene532 om mee te doen. De mogelijke antwoorden zijn voor elke snippet hetzelfde:
gcc
commando)Includes en namespaces worden buiten beschouwing gelaten.
Klik op de snippet headers om de snippet te tonen.
class Student; class Teacher { private: std::vector<Student*> students; public: Teacher() { students.push_back(new Student()); } };
Antwoord: Compile fout; forward definition van Student
klasse kan, maar new()
niet.
class Student; class Teacher { private: std::vector<Student*> students; public: Teacher() { students.push_back(NULL); } };
Antwoord: Werkt. NULL
toevoegen werkt omdat het een pointer naar ‘niets’ is.
void maths(int* x) { x++; } int main() { int one = 0; maths(&one); return one == 1; }
Antwoord: Onverwacht gedrag. x++
verhoogt het adres van de pointer, niet de eigenlijke waarde: we moeten hier nog dereferencen.
void swap(int* x, int* y) { int z = *x; *x = *y; *y = z; } int main() { int two = 1, one = 2; swap(&one, &two); }
Antwoord: Werkt. Tekstboek voorbeeld van waardes swappen.
class X { public: int i; X(int i) : i(i) {} }; bool setToOne(const X& x) { x.i = 1; return x.i == 1; } int main() { X x(2); std::cout << setToOne(x); }
Antwoord: Compile fout. const
betekent dat de waarde van x niet kan wijzigen, dus x.i = 1
geeft een fout.
struct dinges { void* x; void* y; }; int main() { int *a; dinges iets = { (void*) a, (void*) a }; delete a; std::cout << iets.x; }
Antwoord: Runtime error. Na de delete
de pointer ‘volgen’ geeft (onverwachte) problemen.
template<typename T> class Punt { private: T x, y; public: Punt(T theX, T theY) : x(theX), y(theY) {} }; int main() { Punt<double> pt(1.2, 3.4); Punt<int> pt2(3, 5); }
Antwoord: Werkt. Een voorbeeld template klasse.
// in punt.h template<typename T> class Punt { private: T x, y; public: Punt(T theX, T theY); T getX() { return x; }; }; // in punt.cpp Punt<T>::Punt(T theX, T theY) : x(theX), y(theY) { } int main() { Punt<int> x(1, 2); std::cout << x.getX(); }
Antwoord: Compile fout. T
herhalen in punt.cpp vereist opnieuw de definitie van de template: template<typename T>
.
int main() { int hoeveel = 0; scanf("%d", hoeveel); printf("echt zoveel? %d\n", hoeveel); }
Antwoord: Runtime error. scanf()
verwacht een correct adres, niet de waarde 0, dat buiten het bereik van het programma valt.
class Inception {}; int main() { vector<Inception**> *v; Inception *x = new Inception(); v = new vector<Inception**>(); Inception** y = new Inception*[10]; y[1] = x; v->push_back(y); }
Antwoord: Werkt. Dubbele pointers zijn Arrays van pointers. Vectoren van dubbele pointers zijn tweedimensionele arrays.