10 C++ Testfragen



  • audacia schrieb:

    (Allerdings wäre es vielleicht besser, einen begründeten, aber wertungslosen Vergleich zu fordern.)

    Hab ich mir auch überlegt, aber dann würde vielleicht vielen nur ein Argument einfallen. Man kann schliesslich auch 3 Vorteile nennen und begründen. 😉

    Aber ich finde deine Liste recht gut, zum Teile habe ich auch Mühe damit. 🙂



  • audacia schrieb:

    5. Was passiert, wenn dieses Programm ausgeführt wird?

    #include <iostream>
    
    struct Base
    {
        virtual const char* getClassName (void) = 0; // abstrakte Basisklasse
        Base (void) { std::cout << "Constructing a '" << getClassName () << "' object" << std::endl; }
        virtual ~Base (void) { std::cout << "Destroying a '" << getClassName () << "' object" << std::endl; }
    };
    
    struct Derived : Base
    {
        virtual const char* getClassName (void) { return "Derived"; }
    };
    
    int main (void)
    {
        Derived d;
        Base* b = &d;
        std::cout << "This is a " << b->getClassName () << std::endl;
    }
    

    Nichts, denn (mit einem vernünftigen Compiler) linkt es erst gar nicht.

    Felix



  • Phoemuex schrieb:

    Nichts, denn (mit einem vernünftigen Compiler) linkt es erst gar nicht.

    Aah, richtig.
    Also eine kleine Indirektion mehr, und schon geht es. Ich trage es oben nach.



  • audacia schrieb:

    2. Welche Schwachstellen fallen in folgender Methode auf, und wie sollte man sie am besten beheben?

    #include <cstdio>
    
    struct data_t
    {
        int     val1;
        int     val2;
        double  val3;
    
        void loadFromFile (const char* filename)
        {
            static const char* signature = "MYDATAFORMAT";
    
            std::FILE* file = std::fopen (filename, "rb");
            if (!file)
                throw "File not found (or so)";
    
            unsigned siglen = std::strlen (signature);
            char* sigbuf = new char[siglen];
            std::fread (sigbuf, std::strlen (signature), 1, file);
            if (std::strcmp (signature, sigbuf) != 0)
                throw "Unknown file format!";
    
            std::fread (this, sizeof (data_t), 1, file);
            std::fclose (file);
            delete sigbuf;
        }
    };
    

    Alles neu schreiben.



  • - for-Schleife in while-Schleife umwandeln
    - Nicht-rekursive Lösung in rekursive umwandeln
    - Bit-Logik-Aufgabe stellen
    - String-Klasse entwerfen lassen
    - Template-Klasse entwerfen lassen
    - try-catch-throw
    - Singleton-Klasse schreiben lassen
    - Beispiele aus STL, vor allem algorithm http://www.cplusplus.com/reference/algorithm/
    ...



  • waaaa schrieb:

    Alles neu schreiben.

    Schon klar. 😉
    Aber eine wichtige Kompetenz ist, sowohl Schwachstellen als auch Ausbesserungsmöglichkeiten konkret benennen zu können.



  • audacia schrieb:

    unsigned siglen = std::strlen (signature);
            // Dieser Fehler ist wohl nicht auszumerzen,
            // oder warum muß er immer wieder gemacht werden?
    

    Siehe Code



  • ProggaJens schrieb:

    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[])" ?^^*

    Man sollte hier aber noch erwähnen, dass dies keine "entweder oder" Frage ist.



  • Scherzkeks schrieb:

    Man sollte hier aber noch erwähnen, dass dies keine "entweder oder" Frage ist.

    Ich glaube sowieso nicht, dass diese 10 Fragen ernst zu nehmen sind... 😉



  • Noch eine schöne Frage:
    Welche Ausgabe hat folgendes Programm?

    #include <iostream>
    
    void f( int a[5])
    {
      std::cout << sizeof(a) << std::endl;
    }
    
    int main()
    {
      int a[5] = {};
      f( a);
      return 0;
    }
    

    (bevor sich jemand beschwert, die Antwort muss keine absolute Größe sein)


Anmelden zum Antworten