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.