10 C++ Testfragen



  • Gib dem Probanden doch lieber Codestücke.

    Z.B.

    1. Warum sollte das nicht funktionieren?

    int& int_ref() {
       int x;
       return x;
    }
    

    2. Sehen Sie hier ein mögliches Problem bezüglich der effizienten Verwendung des Arbeitsspeichers?

    char* ltrim(const char* s) {
       while(isspace(*s))
          ++s;
       char* new_string = new char[strlen(s)];
       while(*s != '\0'){
          *new_string = *s;
          ++s;
          ++new_string;
       }
       return new_string;
    }
    

    (Ich weiß, das ist C. Aber man sollte als C++-Programmierer wenigstens wissen warum so etwas nicht sinnvoll ist.)

    Sind nur beliebige Beispiele und sicherlich auch nicht perfekt - von Tippfehlern mal ganz abgesehen. Sie sollten aber zeigen was ich meine. Anhand von so etwas kann man doch eher sehen, ob jemand mit der Sprache umgehen kann, oder?



  • Simon2 schrieb:

    Virokams schrieb:

    ...
    2. Welche Speichern werden beim Compilieren benutzt "reserviert"
    ...

    Sorry, aber die Frage verstehe ich nicht (rein semantisch)... 😕

    ja. du hast vielleicht 2 speichern und wenn du compilieren willst. da muss der compilierer ja einen speichern benutzen "reservieren" damit er er den anderen speichern compilieren kann! wie soll man den sonst speichern benutzen "reservieren". verstehst du?



  • erklärbär schrieb:

    Simon2 schrieb:

    Virokams schrieb:

    ...
    2. Welche Speichern werden beim Compilieren benutzt "reserviert"
    ...

    Sorry, aber die Frage verstehe ich nicht (rein semantisch)... 😕

    ja. du hast vielleicht 2 speichern und wenn du compilieren willst. da muss der compilierer ja einen speichern benutzen "reservieren" damit er er den anderen speichern compilieren kann! wie soll man den sonst speichern benutzen "reservieren". verstehst du?

    Kein Wort!



  • erklärbär schrieb:

    ja. du hast vielleicht 2 speichern und wenn du compilieren willst. da muss der compilierer ja einen speichern benutzen "reservieren" damit er er den anderen speichern compilieren kann! wie soll man den sonst speichern benutzen "reservieren". verstehst du?

    Könntest du das bitte noch in Deutsch oder von mir aus Englisch übersetzen? 😉

    Irgendwie erinnert mich das an die automatischen Übersetzungen Koreanischer Betriebsanleitungen.



  • asc schrieb:

    erklärbär schrieb:

    ja. du hast vielleicht 2 speichern und wenn du compilieren willst. da muss der compilierer ja einen speichern benutzen "reservieren" damit er er den anderen speichern compilieren kann! wie soll man den sonst speichern benutzen "reservieren". verstehst du?

    Könntest du das bitte noch in Deutsch oder von mir aus Englisch übersetzen? 😉

    Irgendwie erinnert mich das an die automatischen Übersetzungen Koreanischer Betriebsanleitungen.

    Ich glaube er hat Speichern mit Ball, Ball mit Elephant und Elepahnt mit Texas verwechselt.. 🙄



  • 😃
    Nee, nee, das ist zweifelsohne dieses Sprachmonstrum, welches einem die Microsoft-Dokumentationen auf deutsch näher bringen soll. Hier ist die komplette version, der link fehlte:

    ja. du hast vielleicht 2 speichern und wenn du compilieren willst. da muss der compilierer ja einen speichern benutzen "reservieren" damit er er den anderen speichern compilieren kann! wie soll man den sonst speichern benutzen "reservieren". verstehst du?*

    *Diese Text wurde übersetzt maschinellerweise. Sehen Sie ein von die Originalversion an: http://www.100jia.net/texte/anddaojia/c_wenzi.htm



  • 0.wieso fange ich bei 0 an zuzählen statt bei 1?
    1.kann ich c++ auch auf einen mac problem los benutzen?
    2.steht int für international? :p
    3.kam c++ vor c?
    4.welche person hat c++ geschaffen?^^
    5.kannst du mir sagen wie groß ein array maximal ist?^^
    6.gehören true und false in c++ zur variablen klasse int, double oder bool?
    7.was ist hier dran falsh "double = 1,0;" ?
    8. heißt es "if" und "else" oder "if" und "or"
    9."int main()" oder "int main(int nNumberofArgs, char* pszArgs[])" ?^^



  • Vielleicht ne frage zu verschiedenen befehlen:
    zum Beispiel was bewirkt der Befehl return 0;
    oder
    wo liegt der fehler:

    int *test;
    test = 10;
    

    jedoch wenn man auch nur sehr leichte erfahrungen in c++ hat kann man soetwas beantworten.



  • Naja, wenn man ernsthaft die Kenntnisse mit 10 Fragen prüfen will, sollte meiner Ansicht nach mindestens ein Drittel über die rein syntaktische Anwendung der C++-Sprachmittel hinausgehen.

    • Worin bestehen die Vorteile von std::list gegenüber std::vector ? Zähle drei wesentliche auf.
    • Was versteht man unter dem Strategy Pattern?
    • Weshalb wird dynamic_cast oftmals als Hinweis auf einen Designfehler erachtet?
    • ...

    Sind jetzt auch nicht gerade die schwierigsten Fragen, aber etwas mehr Erfahrung benötigt man für die schon. Und beispielsweise könnte man noch Dinge über Template-Metaprogrammierung fragen, das wird dann schon ein bisschen schwieriger. 😉



  • Nexus schrieb:

    • Worin bestehen die Vorteile von std::list gegenüber std::vector ? Zähle drei wesentliche auf.
    • Was versteht man unter dem Strategy Pattern?
    • Weshalb wird dynamic_cast oftmals als Hinweis auf einen Designfehler erachtet?
    • ...

    Hat jetzt nicht wirklich was mit C++ zu tun sondern mit SW-Entwicklung allgemein.



  • nonstop schrieb:

    Hat jetzt nicht wirklich was mit C++ zu tun sondern mit SW-Entwicklung allgemein.

    Das sehe ich aber anders. dynamic_cast gehört ebenso zur Sprache wie die Standardbibliothek. Von jemandem, der nur die reinen Sprachmittel und deren Syntax beherrscht, würde ich nicht sagen, er "könne gut C++".



  • List vs. Vector hat nichts mit Standardbibliothek zu tun sondern mit Datenstrukturen allgemein. dynamic_cast macht man in anderen Sprachen mit instanceof usw. Oder was stellst du dir bei denen für ne Antwort vor die nur für C++ zutrifft?
    Pattern dürfte wohl klar sein, das es allgemein ist.



  • nonstop schrieb:

    List vs. Vector hat nichts mit Standardbibliothek zu tun sondern mit Datenstrukturen allgemein.

    Trotzdem arbeitet die STL mit eher C++-spezifischen Konzepten wie Iteratoren, Zeiger und Templates. Und meiner Ansicht nach tragen die STL-Container auch zum Verständnis der Sprache C++ bei - zumindest würde ich von niemanden sagen, er kenne sich mit C++ aus, wenn er noch nichts von der STL (oder allgemein Standardbibliothek) gehört hat.

    nonstop schrieb:

    dynamic_cast macht man in anderen Sprachen mit instanceof usw.

    Hm, instanceof kenne ich jetzt nicht, aber ich glaube nicht, dass das genau identisch mit dynamic_cast ist. Oder warum meinst du?

    nonstop schrieb:

    Oder was stellst du dir bei denen für ne Antwort vor die nur für C++ zutrifft?

    Wieso darf die Antwort nur auf C++ zutreffen? Es geht ja darum, wie gut man C++ beherrscht. Sehr viele Dinge, die man in C++ lernt, kann man dann auch in anderen Sprachen besser anwenden. Das fängt schon bei grundlegendsten Dingen wie If-Abfragen und Schleifen an und zieht sich über sehr viele Sprachkonzepte hinweg.

    nonstop schrieb:

    Pattern dürfte wohl klar sein, das es allgemein ist.

    Da stimme ich dir schon eher zu. Aber ich finde, man erhält so auch Auskunft darüber, wie gut man eine Programmiersprache wie C++ in der Praxis anwenden kann. C++ geht gegenüber anderen modernen Sprachen wie C# oder Java ein wenig seinen eigenen Weg, was Objektorientierung betrifft. Das dürfte bereits einen Unterschied bezüglich Entwurfsmuster bewirken. Zudem kommen dann auch noch andere Differenzen wie Zeiger dazu, was wiederum einen Teil beiträgt.

    Die ursprüngliche Fragestellung lässt einem sowieso sehr viel Spielraum - man kann die Kenntnis der Sprache C++ nicht ausschliesslich an den Sprachmitteln messen, die in anderen Programmiersprachen nicht vorkommen.

    Tut mir übrigens leid, dass ich dir deinen Post so zerstückelt habe, aber ich wollte halt spezifisch antworten. 😉



  • Nexus schrieb:

    nonstop schrieb:

    Oder was stellst du dir bei denen für ne Antwort vor die nur für C++ zutrifft?

    Wieso darf die Antwort nur auf C++ zutreffen? Es geht ja darum, wie gut man C++ beherrscht. Sehr viele Dinge, die man in C++ lernt, kann man dann auch in anderen Sprachen besser anwenden. Das fängt schon bei grundlegendsten Dingen wie If-Abfragen und Schleifen an und zieht sich über sehr viele Sprachkonzepte hinweg.

    Sag ich doch. Hat jetzt nicht wirklich was mit C++ zu tun sondern mit SW-Entwicklung allgemein.



  • nonstop schrieb:

    Sag ich doch. Hat jetzt nicht wirklich was mit C++ zu tun sondern mit SW-Entwicklung allgemein.

    Du hast nicht verstanden, was ich sagen wollte. Ich behaupte, dass sich jenes von dir genannte Kriterium sich auf die meisten Sprachmittel von C++ anwenden lässt.

    Nochmals:

    Nexus schrieb:

    man kann die Kenntnis der Sprache C++ nicht ausschliesslich an den Sprachmitteln messen, die in anderen Programmiersprachen nicht vorkommen.

    In diesem Kontext wäre die ursprüngliche Fragestellung des Threaderstellers also sinnlos.



  • Virokams schrieb:

    3. warum kann einem const char * nichts zugewiesen werden. 😕

    Die Frage ist falsch gestellt. Es geht nämlich, der Zeiger ist nicht "const".



  • nonstop schrieb:

    dynamic_cast macht man in anderen Sprachen mit instanceof usw.

    Und seltsamerweise deutet die Benutzung von "instanceof" usw. in anderen Sprachen nicht auf Designfehler hin.



  • ~john schrieb:

    Virokams schrieb:

    3. warum kann einem const char * nichts zugewiesen werden. 😕

    Die Frage ist falsch gestellt. Es geht nämlich, der Zeiger ist nicht "const".

    Besser wäre:
    Warum kann ein char** nicht einem const char** zugewiesen werden? 😉



  • 7H3 N4C3R schrieb:

    Besser wäre:
    Warum kann ein char** nicht einem const char** zugewiesen werden?

    Auch nicht gut. Es geht so: a = (const char**)b;



  • c++fan 2008 schrieb:

    7H3 N4C3R schrieb:

    Besser wäre:
    Warum kann ein char** nicht einem const char** zugewiesen werden?

    Auch nicht gut. Es geht so: a = (const char**)b;

    Das ist aus der Rubrik, warum man C-Casts nicht verwenden sollte.


Anmelden zum Antworten