Wilkening-Online Logo

C++ Quiz-Fragen



Von Detlef Wilkening
5.1.2016
Version: 2

Einleitung

In den letzten drei Jahren habe ich auf den Dezember C++ User-Treffen in Düsseldorf jeweils ein C++ Quiz durchgeführt - siehe Dezember 2013, Dezember 2014 und Dezember 2015. Jedes Jahr bin ich hinterher gefragt worden, ob ich die Präsentation nicht veröffentlichen könnte. Da einige Fragen aber nicht von mir stammen, bin ich mir nicht sicher, ob die Veröffentlichung eine Copyright- oder Urheberrechts-Verletzung wäre - immerhin ist eine gute C++ Frage sicher eine schöpferische Leistung - denn soviele gute Fragen gibt es in C++ ja nicht ;-).

Scherz beiseite - ich gehe lieber auf "Nummer Sicher". Darum werde ich ab jetzt lieber Stück für Stück (Frage für Frage) die C++ Quiz-Fragen der letzten Jahre hier veröffentlichen, die keine Probleme bereiten. Außerdem werde ich in diesem Zuge ein paar Fragen auch zusammenziehen bzw. leicht umbauen oder erweitern - so dass der Spaß noch größer wird. Den Anfang machen heute (20.12.2015) die ersten drei ganz einfachen Fragen. Im Laufe der Zeit werden sicher weitere Quiz-Fragen hinzukommen - es lohnt sich also ab und zu mal hier vorbei zu schauen...

Und natürlich plane ich schon das nächste C++ Quiz im Dezember 2016 in Düsseldorf. Wer also gute Fragen hat, oder Quellen interessanter Fragen kennt - bitte mailt sie mir. Und kommt dann im Dezember 2016 nach Düsseldorf zum nächsten C++ Quiz.

Hier nochmal die Regeln: Ach ja - noch ein Tipp: manche Beispiele sehen zwar komisch aus, verhalten sich aber ganz normal. Also nicht ewig nach Fallen suchen, wenn vielleicht gar keine da sind. Im echten Quiz ist dies natürlich ein interessanter sozialer Aspekt: kaum sind die Teilnehmer ein paar Mal reingefallen, werden sie vorsichtig - und dabei auch schnell zu vorsichtig...



1. C++ Frage "Default-Argumente"

Standard-Frage:

#include <iostream>
using namespace std;

int a = 1;

int f(int n)
{
   return n;
}

int g(int x = f(a))
{
   return x;
}

void h()
{
   a = 2;
   {
      int a = 3;
      cout << g() << endl;
   }
}

int main()
{
   h();
   a = 4;
   cout << g() << endl;
}

Hinweise:

#include <iostream>
using namespace std;

int a = 1;

int f(int n)
{
   return n;
}

int g(int x = f(a))
{
   return x;
}

void h()
{
   a = 2;
   {
      int a = 3;
      cout << g() << endl;
   }
}

int main()
{
   h();
   a = 4;
   cout << g() << endl;
}

Antwort:

2
4




2. C++ Frage "Vererbung"

Standard-Frage:

#include <iostream>
using namespace std;

struct Base
{
   void f(int n)
   {
      cout << "Base int: " << n << endl;
   }
   void f(double d)
   {
      cout << "Base double: " << d << endl;
   }
};

struct Derived : Base
{
   void f(double d)
   {
      cout << "Derived double: " << d << endl;
   }
};

int main()
{
   Base b;
   b.f(2);
   b.f(3.14);

   Derived d;
   d.f(2);
   d.f(3.14);
}

Hinweise:

#include <iostream>
using namespace std;

struct Base
{
   void f(int n)
   {
      cout << "Base int: " << n << endl;
   }
   void f(double d)
   {
      cout << "Base double: " << d << endl;
   }
};

struct Derived : Base
{
   void f(double d)
   {
      cout << "Derived double: " << d << endl;
   }
};

int main()
{
   Base b;
   b.f(2);
   b.f(3.14);

   Derived d;
   d.f(2);                         // Was passiert hier?
   d.f(3.14);
}

Antwort:

Base int: 2
Base double: 3.14
Derived double: 2
Derived double: 3.14




3. C++ Frage "Namespaces"

Standard-Frage:

#include <iostream>
using namespace std;

void f() 
{ 
   cout << "f" << endl; 
}

namespace A
{
   void g() 
   { 
      cout << "A::g" << endl;
   }
}

namespace B
{
   using ::f;
   using A::g;
}

void h()
{
   B::f();
   B::g();
}

int main()
{
   h();
}

Hinweise:

#include <iostream>
using namespace std;

void f()
{
   cout << "f" << endl;
}

namespace A
{
   void g()
   {
      cout << "A::g" << endl;
   }
}

namespace B
{
   using ::f;             // Geht das?
   using A::g;            // Geht das?
}

void h()
{
   B::f();                // Ist der Aufruf korrekt?
   B::g();                // Ist der Aufruf korrekt?
}

int main()
{
   h();
}

Antwort:

f
A::g




4. C++ Frage "Konstruktion & Destruktion 1"

todo
todo


mark todo
hint
info

#include <iostream>
using namespace std;

todo

todo
todo


mark todo
hint
info

#include <iostream>
using namespace std;

todo

todo
todo


mark todo
hint
info

#include <iostream>
using namespace std;

todo


<

5. C++ Frage "Konstruktion & Destruktion 2"

todo
todo


mark todo
hint
info

#include <iostream>
using namespace std;

todo

todo
todo


mark todo
hint
info

#include <iostream>
using namespace std;

todo

todo
todo


mark todo
hint
info

#include <iostream>
using namespace std;

todo


<

6. C++ Frage "atexit"

Standard-Frage:

#include <cstdlib>
#include <iostream>
using namespace std;

struct A
{
   A(const char* p) : p(p) { cout << "Konstruktor " << p << endl; }
   ~A() { cout << "Destruktor " << p << endl; }

   A(const A&) = delete;
   A& operator=(const A&) = delete;

   A(A&&) = delete;
   A& operator=(A&&) = delete;

private:
   const char* p;
};

static A a1("a1");

void fct()
{
   cout << "fct" << endl;
}

static A a2("a2");

int main()
{
   static A s1("s1");
   cout << "Start" << endl;
   static A s2("s2");
   atexit(&fct);
   static A s3("s3");
   cout << "Ende" << endl;
   static A s4("s4");
}

static A a3("a3");

Hinweise:

#include <cstdlib>
#include <iostream>
using namespace std;

struct A
{
   A(const char* p) : p(p) { cout << "Konstruktor " << p << endl; }
   ~A() { cout << "Destruktor " << p << endl; }

   A(const A&) = delete;
   A& operator=(const A&) = delete;

   A(A&&) = delete;
   A& operator=(A&&) = delete;

private:
   const char* p;
};

static A a1("a1");

void fct()
{
   cout << "fct" << endl;
}

static A a2("a2");

int main()
{
   static A s1("s1");
   cout << "Start" << endl;
   static A s2("s2");
   atexit(&fct);
   static A s3("s3");
   cout << "Ende" << endl;
   static A s4("s4");
}

static A a3("a3");

Antwort:

Konstruktor a1
Konstruktor a2
Konstruktor a3
Konstruktor s1
Start
Konstruktor s2
Konstruktor s3
Ende
Konstruktor s4
Destruktor s4
Destruktor s3
fct
Destruktor s2
Destruktor s1
Destruktor a3
Destruktor a2
Destruktor a1




7. C++ Frage "Operatoren"

Standard-Frage:

#include <iostream>
using namespace std;

int  main()
{
   cout << (2<2<2) << (1<1<1) << (0<0<0) << (-1<-1<-1) << endl;
}

Hinweise:


mark todo
hint
info

#include <iostream>
using namespace std;

int  main()
{
   cout << (2<2<2) << (1<1<1) << (0<0<0) << (-1<-1<-1) << endl;
}

Antwort: 1100 Kleiner-Operator wird von links nach rechts ausgewertet False <=> 0 True <=> 1 Erster Teil ist immer false => immer "0" => 0 todo


mark todo
hint
info

#include <iostream>
using namespace std;

todo




Versions-Historie

Die Versions-Historie dieses Artikels:
  • Version 1
    • 20.12.2015
    • Initiale Version mit den ersten drei Fragen
  • Version 2
    • 5.1.2016
    • Vier weitere Fragen (4..7) hinzugefügt
Schlagwörter: