Wie erzwinge ich die Konstanz des Speichers, auf den obj- & gt; val1 in der Funktion fn zeigt?
%Vor%Der Code hier ist ziemlich selbst erklärend. Ich muss in der Lage sein, ein nicht-konstantes Objekt zu machen und es mit Daten zu füllen, aber es dann an eine Funktion weiterzugeben, wo diese Daten nicht geändert werden können. Wie kann ich darüber gehen?
Ich weiß, ich kann einfach einen const int-Zeiger übergeben, aber theoretisch enthält diese Klasse mehrere andere Zeiger, die ich auch in "fn" brauche.
Danke,
Griff
Da Sie mit C ++ getaggt haben, könnten Sie das Mitglied private
erstellen und einen Accessor erstellen, der ein const int *
zurückgibt. Sie könnten das Mitglied ursprünglich über Ihren Konstruktor oder eine friend
-Funktion setzen.
Ich bin keine C ++ - Person, aber in C würde ich das durch zwei verschiedene struct-Deklarationen behandeln, eine öffentliche, eine private:
%Vor%Wenn ich versuche, das obige w / GCC zu kompilieren, erhalte ich die folgenden Compilerfehler, da ich versuche, schreibgeschützten Speicher zu ändern:
%Vor%Das kannst du wirklich nicht. Ein const foo gibt an, dass die Mitglieder innerhalb const sind, dh sie sind konstante Zeiger auf ganze Zahlen, keine Zeiger auf konstante ganze Zahlen.
Die richtige Lösung hierfür wäre die Kapselung, das Ausblenden dieser Elemente und das Bereitstellen einer öffentlichen Schnittstelle. Eine praktische Lösung, sollte es Ihnen verboten sein, die Struktur foo zu ändern, wäre durch private Vererbung:
%Vor%Natürlich müssten Sie die entsprechenden Konstruktoren usw. erstellen, damit das ursprüngliche foo erstellt werden kann.