Instanz erzeugen



  • Guten Tag ,

    Es geht um eine Aufgabe bei der ich noch nicht zurecht komme:

    http://s7.directupload.net/images/140919/temp/6i8lpnc2.png

    class Dame:Stein{
    }

    Dame schwarz;
    Dame weiss;

    Dame schwarz.Typ='D';
    Dame schwarz.Farbe=true;
    Dame weiss.Typ='D';
    Dame weiss.Farbe=false;

    Und wollte ein Feedback dazuhaben 🙂

    Vielen dank für die Hilfe
    Gruss



  • Was ist das für ein Abfallcode rechts im Bild? Ist das mit Stein* , char und Init ernst gemeint? Wo "lernst" du C++ wenn man fragen darf?

    Was bitte ist ein "Nachfahre"? Immer diese Begriffsfindung. Du hast übrigens das Semikolon nach } vergessen und außerdem wird wohl kaum private Vererbung erwünscht sein. Aber wir haben Glück und müssen die Klasse nur deklarieren:

    class Dame;
    

    Fertig.

    Uhm, das geht nicht da die Definition von Dame nicht gegeben ist. Daher kannst du die getrost auslassen.

    1. Initialisierung geschieht beim Konstruieren (und nicht mit Init !). Da die Definition fehlt auch auslassen.

    2. Ah, nun definieren wir die Klasse endlich.

    class Dame //Keine Ahnung was ein Nachfahre sein soll...
    {
        int Move(int, char)
        {
            //Welches Brett ist gemeint? Weiß keiner so genau, dasselbe gilt für das Schriftzeichen, das wir übergeben bekommen haben
            return 42;
        }
    };
    


  • Ist zwar shitty Code (Aufgabenstellung und deiner), aber sollte genügen.

    Ich würde mich nach anderen Lernquellen umschauen. Dem Bild zu folge ist deine Quelle wirklich keine gute.



  • An einer Uni 😉

    1. Wird wohl Vererbung gemeint sein. Also
    class Dame:Stein;
    

    ?
    2,3) Das ganze ist eher aus der reinen Theorie Perspektive zu sehen. 3) Könnte also passen ?
    4) Die reihen des Spielbretts sind von 'a' bis 'h' und die Felder der Reihe von 1 bis 4 nummeriert.

    Gruss

    Edit: War ne Klausuraufgabe



  • newinc schrieb:

    An einer Uni 😉
    [...]
    Edit: War ne Klausuraufgabe

    Und sowas wird staatlich subventioniert. Kopf -> Tisch

    newinc schrieb:

    1. Wird wohl Vererbung gemeint sein. Also
    class Dame:Stein;
    

    ?

    In Deklarationen (wie auf dem Bild gefordert) wird nicht Vererbt, das geschieht erst in der Definition. Und da sollte man noch die Art der Vererbung angeben, also class Dame : public Stein {}; beispielsweise (ansonsten ist es bei class standardmässig private , was ziemlich sicher nicht erwünscht ist).

    newinc schrieb:

    2,3) Das ganze ist eher aus der reinen Theorie Perspektive zu sehen.

    Und? Dennoch kann man nicht instanziieren solange man die Definition nicht kennt. Aber meinetwegen: Ja deine Version ist richtig solange ein Defaultkonstruktor vorhanden ist und dieser das tut, was man möchte.

    newinc schrieb:

    1. Könnte also passen ?

    Ne, wieso schreibst du den Typen hin? Den Typen schreibt man bei der Deklaration und bei der Definition von Variablen hin, sonst nirgends.

    [quote="newinc"4) Die reihen des Spielbretts sind von 'a' bis 'h' und die Felder der Reihe von 1 bis 4 nummeriert.[/quote]Nur weil man den Feldern a - h sagt soll man sie so auch speichern? Halte ich für groben Unfug. Beim Programmieren beginnen Indices immer bei 0. Auch hier.



  • Eine Dame als von Spielstein abgeleitete Klasse zu definieren bei Checkers ist großer Blödsinn. Bei der Promotion zu einer Dame muss also der Spielstein dynamisch gelöscht und eine Dame dynamisch erstellt werden? Und das obwohl es in der Klasse Stein schon den Member Typ zur Klassifikation von Damen hat?!? wtf?
    Mir fehlt daher der virtuelle Destruktor von Stein . Ebenso wie mir der Smartpointer in Feld fehlt.

    Immer alles möglichst kluk / kuul lösen wollen (damit meine ich den Prof oder welcher Hans auch immer diesen Code fabriziert hat) und dann solche Fehler zu begehen. 👎



  • @nerdrage Hier geht es nicht um die Logik der Aufgabestellung, noch um ein perfektes Codebeispiel.
    Ja die Aufgabe macht eher wenig Sinn und ist unsauber, aber das ist völlig irrelevant.
    Virtuelle Destruktoren und vorallem Smart Pointer brauchen newinc vorerst auch nicht interessieren.

    @newinc

    class Dame : public Stein // Wie nerdrage schon sagte, wird hier wohl auch public gewollt sein.
    {
      // ...
    };
    
    // ----
    
    Dame schwarz;
    schwarz.Typ = 'D';   // Wie nerdrage ebenfalls schon sagte, würde
    schwaz.Farbe = true; // solch ein Code eher in den Konstruktor fallen.
    
    Dame weiss;
    weiss.Typ = 'D';
    weiss.Farbe = false;
    

    So in die Richtung.



  • Ich danke dir!! 🙂

    Kann ich noch paar Fragen "verbessern" lassen? Hab noch welche gemacht:

    http://s7.directupload.net/images/140923/mnskzyj8.png

    3,1)
    clQ Quada;
    clQ Quadrata;

    3,2)

    int Quadrat(){
       int i;
       for (i=0;i<=M);i++)
          a[i]=i*i;
    };
    

    3,3)

    class clQ{
      public:
        int Quadrat(void);
        int Mittel(int n);
      private:
        //...
    };
    int Mittel(int n){
      int i,sum,moy;
    
      sum=0;
      moy=0;
      for(i=0;i<=n;i++)
        sum=sum+a[i];
    
      moy=sum/i;
    
      return moy;
    };
    

    3,4)
    static int moy;

    Sieht das gut aus ?

    Und dann hätte ich noch eine Aufgabe:
    http://s7.directupload.net/images/140923/nr6gvgtz.png

    2,1)

    clP Paket;
    

    2,2)

    clP Pakete[100];
    

    2,3)

    class clP{
      private:
        //...
      public:
        clP(); // Konstruktor
        int Write(Pak);
        int Read(*Pak);
    };
    

    Soll ich für die nächsten beiden Teilaufgaben eine Struct deklarieren um die Teilaufgaben besser zu lösen ?

    2,4)
    2,5)

    Vielen dank und lG


Log in to reply