C / C ++: Zeiger innerhalb von Const Struct

8

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

    
Griffin 04.07.2010, 23:11
quelle

3 Antworten

6

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.

    
Brian R. Bondy 04.07.2010, 23:16
quelle
4

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%     
rampion 04.07.2010 23:53
quelle
2

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.

    
Shirik 04.07.2010 23:21
quelle

Tags und Links