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.