kostenloser Webspace werbefrei: lima-city


Fitnesstest

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    matoba

    matoba hat kostenlosen Webspace.

    Dieses Posting ist nur f?r diejenigen, die ihre Fitness in C beweisen wollen:

    Was ist hier falsch:
    #define C_Max 25;

    Wo liegt der tag/fehler">Fehler:
    #define C_Max 5
    #define C_Max2 C_Max+2
    int mein_feld [C_Max * C_Max2];

    Viel Spass!
    Matoba
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. d*****s

    -> Was ist hier falsch:
    -> #define C_Max 25;

    #define C_Max 25

    -> Wo liegt der Fehler:
    -> #define C_Max 5
    -> #define C_Max2 C_Max+2
    -> int mein_feld [C_Max * C_Max2];

    das array mein_feld wird nicht - wie beabsichtigt - mit 35, sondern nur mit 27 feldern deklariert.
    (5*5+2 - punkt- vor strichrechnung)

    entweder: #define C_Max2 (C_Max+2)
    oder: int mein_feld[C_Max * (C_Max2)];

    war leicht, n?chstes! :biggrin:
  4. Autor dieses Themas

    matoba

    matoba hat kostenlosen Webspace.

    Stimmt ohne Einschr?nkung!:fart:
    N?chste Runde:
    Stimmt hier alles?

    class A {
    int fn;
    A (int n) { fn = n; }
    };
    class B : public A {
    int fm;
    B (int n, int m) { A (n); fm = m; }
    };
    Viel Spa?!
  5. Ich glaube, ich habe die L?sung, aber ich will des-sys den Spass nicht verderben, er hat immerhin ein "n?chstes" verlangt.
    Ich schaue in 3 Tagen noch mal vorbei und antworte dann.

    Mein Beitrag zum Test:
    Was ist besser (und warum):

    class A {
    char *szBuffer;
    public:
    A () { szBuffer = new char [1024]; }
    virtual ~A () { delete [] szBuffer; }
    }
    oder
    class A {
    char *szBuffer;
    public:
    A () { szBuffer = new char [1024]; };
    ~A () { delete [] szBuffer; };
    }

  6. Der Aufruf von A(n) d?rfte wohl nicht funktionieren. Hier mal mein l?sungversuch (hab ich nicht getestet):

    class A {
    int fn;
    A (int n) { fn = n; }
    };
    class B : public A {
    int fm;
    B (int n, int m) : A(n) { fm = m; }
    };

    A(n) wird inder Parameterliste aufgerufen. (Ich hoffe die Syntax stimmt. Wemm man ein Dutzend Programmiersprachenspricht kommt man da manchmal durch eindander.)

  7. -> class A {
    -> char *szBuffer;
    -> public:
    -> A () { szBuffer = new char [1024]; }
    -> virtual ~A () { delete [] szBuffer; }
    -> }

    Nat?rlich mit Virtual, damit bei einer Vererbung und Morphi usw. auch das Buffer wirklich gel?scht wird.
  8. -> Der Aufruf von A(n) d?rfte wohl nicht funktionieren. Hier
    -> mal mein l?sungversuch (hab ich nicht getestet):

    Sastra hat Recht.
    F?r nicht ganz so Eingeweihte eine l?ngere Erkl?rung:

    Im Konstruktor von B wird der Konstruktor von A aufgerufen. Das produziert ein Objekt der Klasse A, das auch brav initialisiert wird, jedoch beim Ende der Methode wieder zerst?rt wird. Es wird also NICHT das ererbte Element fn besetzt, sondern dieses bleibt undefiniert.

    Sastra hat die L?sung korrekt angegeben, der Aufruf eines ererbten Konstruktors muss in der sogenannten Basisliste (zwischen Parameter und Methodenrumpf) angegeben werden. Ist das aus Gr?nden der Reihenfolge (die Anweisungen der Basisliste werden vor dem Rumpf des Konstruktors abgearbeitet) nicht m?glich (sehr selten der Fall), m?ssen die Anweisungen des Basis-Konstruktor in eine andere Methode (z.B. create ()) ausgelagert und diese dann in den Konstruktoren aufgerufen werden.
  9. Autor dieses Themas

    matoba

    matoba hat kostenlosen Webspace.

    ->
    -> Nat?rlich mit Virtual, damit bei einer Vererbung und Morphi
    -> usw. auch das Buffer wirklich gel?scht wird.

    Hier hat sich sastra aufs Glatteis f?hren lassen: Er h?tte recht, wenn Klasse A eine Ableitung von einer anderen Klasse w?re.
    Ist A jedoch keine Ableitung (wie im Fitnesstest), ist die virtuelle Funktion unn?tig und ein klitzekleinwenig ineffizienter.

    Warum aber virtueller Destruktor bei abgeleiteten Klassen?
    ----
    Bsp:
    class B : public A { .... };
    A *x = FragDenBenutzer () ? B () : A ();
    ...
    delete x;
    ----
    Hier ist das Objekt x entweder vom Typ A oder B, je nach Benutzereingabe. Am Ende wird der Destruktor aufgerufen. Ist nun der Destruktor nicht virtuell, wird der Destruktor von A aufgerufen, auch wenn das Objekt vom Typ B ist.
    Bei virtuellen Funktionen wird dagegen der korrekte Destruktor aufgerufen.
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!