Frage mit Indirektionsoperator



  • Hallo,
    ich versuche mich gerade in OOP mit dem Buch "C++ - Von A bis Z"
    Ich habe jetzt eine Klasse gemacht:

    #include <iostream>
    
    #ifndef _MEINHEADER_H_
    #define _MEINHEADER_H_
    
    class Mensch{
    private:
    	char name[30];
    	unsigned int alter;
    	bool geschlecht;
    public:
    	//Konstructoren
    	Mensch(const char*, unsigned int, bool);
    	Mensch(const char*, unsigned int*);
    	Mensch(const char*);
    
    	void sehen(const char* objekt);
    	void hoeren(const char* geraeusch);
    	void riechen(const char* geruch);
    	void schmecken(const char* geschmack);
    	void tasten(const char* objekt);
    	void print(void);
    
    	~Mensch();
    };
    #endif
    

    Und wollte die Konstruktoren definieren:

    #include "MeinHeader.h"
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    //Konstruktoren
    Mensch::Mensch(const char* n, unsigned int a, bool g){
    	strncpy_s(name, n, sizeof(name)-1);
    	alter = a;
    
    }
    

    Meine Frage:
    Warum kann man (bei dem Kontruktor)

    Mensch(const char*, unsigned int, bool);
    

    nur bei "const char" den indirektionsoperator* anwenden und bei "unsigned int" nicht? Das gibt bei mir dann einen Fehler?
    Ich kann nicht "unsigned int*" mit "alter" zuweißen.



  • C++ - Von A bis Z

    Dieses Buch ist eines der verpöntesten Sachbücher weit und breit.
    Such es bitte einfach mal mit der Forensuche, dann findest du genug dazu.

    Um das mal ein wenig expliziter zu formulieren: Dieses Buch ist bekannt dafür, Grundlagen zu C++ und OOP falsch zu vermitteln. Die Beispiele sind oft völlig unprofessionell (und teils gar einfach falsch) programmiert.
    Die Rezensionen sind komischerweise sehr gut - völlig lächerlich, entweder hatte der Rezensent selber keine Ahnung, oder er wurde dafür Bezahlt.
    Insgesamt wohl das schlechteste Buch zu dieser Programmiersprache, dass es gibt. Tu dir selbst und dem Rest der Menschheit einen Gefallen und "leg es weg". Wenn du wirklich C++ lernen willst, dann - ja dann - siehe unten, ich verweise auf einen Link zu guter Fachliteratur.

    Ich habe jetzt eine Klasse gemacht:

    Deine Klasse ist nicht gut*.
    Schon bei einem solchen Beispiel kam viel Kritik herauf, suche es einfach mal im Forum.

    nur bei "const char" den indirektionsoperator* anwenden und bei "unsigned int" nicht? Das gibt bei mir dann einen Fehler?
    Ich kann nicht "unsigned int*" mit "alter" zuweißen.

    Das du so komische Fragen stellst, kann nur daran liegen, dass dieses Buch einfach die Grundlagen völlig falsch vermittelt hat. Du bist längst nicht das erste Opfer dieses Verlags, dass so komische Ideen bekommt.

    Hol dir ein gutes Grundlagenbuch, ich empfehle dir, dir mal die Sektion "Bücher" bei diesem Link anzusehen. 😋 👍

    P.S.: Willst du wirklich noch eine Antwort auf deine eigentliche Frage?
    Du kannst einem Non-Zeiger (ein Objekt, dass kein Zeiger ist) keinen Zeiger zuweisen. Macht auch furchtbar wenig Sinn, nicht wahr? Jedenfalls nicht direkt.
    Hier siehst du wieder, wie völlig banale Themen dank Jürgen zu einem Missverständnis führen.

    Begründung: C-Strings. Das Jürgen mit denen anfängt und erst nach Sieben Kapiteln o.ä. zum eigentlichen std::string kommt, ist fragwürdig. Natürlich ist es aber auch ein mMn. schlechtes Beispiel für Klassen.


  • Mod

    Der Dereferenzierungsoperator kann nur auf Pointer (und eigene Klassen, die ihn definieren) angewendet werden. Ein unsigned int ist kein Pointer, sondern eine Zahl. Was sollte das Ergebnis dieser Aktion sein?

    Zogger007 schrieb:

    ich versuche mich gerade in OOP mit dem Buch "C++ - Von A bis Z"

    Dieses Buch ist bekannt schlecht. Sowohl was C++ im Allgemeinen angeht und ganz besonders was Objektorientierung angeht. Nutze es nicht zum Lernen! Ich kommentiere deinen Code mal nicht im Detail, aber man sieht deutlich, dass du nach diesem Buch gelernt hast (im negativen Sinne). Es ist auch nicht weiter verwunderlich, dass du das Pointerkonzept nicht richtig verstanden hast, wenn du nach diesem Buch lernst.

    Es ist zwar schade um deine 40€, aber wenn du weiter mit diesem Buch lernst, schadest du dir bloß selber. Das ist kein Scherz! Schlechte Angewohnheiten wird man sehr schwer wieder los. Siehe den zweiten Link in meiner Signatur für bessere Bücher.

    edit: Sone war schneller als ich, aber ich denke ein sachlich formulierter Beitrag ist vielleicht überzeugender als Sones Geschrei, auch wenn wir beide inhaltlich das gleiche sagen.



  • Sones Geschrei,

    Ich kann meine Meinung auch weniger vehement formulieren, wenn es dir so besser passt.
    Edit: Und?



  • Vielen Dank für eure Antworten 🙂
    Ich glaube euch auch mit diesem Buch, weil mir gerade die OOP total schwer fällt und irgendwie nichts kapier.
    Ich habe deshalb eine Zeit lang keine Lust mehr gehabt zu programmieren.
    Ich folge mal eure Links 🙂


  • Mod

    Sone schrieb:

    Sones Geschrei,

    Ich kann meine Meinung auch weniger vehement formulieren, wenn es dir so besser passt.
    Edit: Und?

    Es kommt eben auf die Reihenfolge an. Wenn gleich die ersten paar Sätze sich lesen wie "Das ist alles nur Scheiße, dein Buch ist Scheiße, du bist Scheiße", wer liest dann überhaupt noch die Begründung?



  • Sone schrieb:

    nur bei "const char" den indirektionsoperator* anwenden und bei "unsigned int" nicht? Das gibt bei mir dann einen Fehler?
    Ich kann nicht "unsigned int*" mit "alter" zuweißen.

    Das liegt ganz offenkundig daran, dass dieses Buch einfach die Grundlagen völlig falsch vermittelt

    Blödsinn!
    Auch, wenn das Buch die Grundlagen anders, von mir aus auch besser, vermitteln würde, ginge das nicht!



  • Belli schrieb:

    Sone schrieb:

    nur bei "const char" den indirektionsoperator* anwenden und bei "unsigned int" nicht? Das gibt bei mir dann einen Fehler?
    Ich kann nicht "unsigned int*" mit "alter" zuweißen.

    Das liegt ganz offenkundig daran, dass dieses Buch einfach die Grundlagen völlig falsch vermittelt

    Blödsinn!
    Auch, wenn das Buch die Grundlagen anders, von mir aus auch besser, vermitteln würde, ginge das nicht!

    😃 👍



  • Blödsinn!
    Auch, wenn das Buch die Grundlagen anders, von mir aus auch besser, vermitteln würde, ginge das nicht!

    Der war gut! 🙄


Anmelden zum Antworten