const
-
Aus einer C-Bibliothek möchte ich eine Funktion
int foo(double* array, int n);innerhalb meiner Klasse
class Klasse { public: Klasse() { n = 100; array = new double[n]; } ~Klasse() { delete array; } int bar() const { return foo(array, n); } void fill() { // fülle array } void badeldudel() { // verändere die Größe des arrays } private: double* array; int n; };Doof ist nur: Ich weiß, foo verändert den Inhalt von array nicht. Und Klasse::bar() möchte ich gerne const haben. Bekommt man das irgendwie hin, ohne die C-Bibliothek zu verändern?
-
badeldudel schrieb:
Doof ist nur: Ich weiß, foo verändert den Inhalt von array nicht. Und Klasse::bar() möchte ich gerne const haben.
Warum versuchst du es denn nicht einfach? Das funktioniert absolut problemlos, ohne irgend etwas zu verändern!
-
Wo ist das Problem? Das const interessiert sich nur für die Membervaribablen deiner Klasse und das ist hier ein Pointer auf double. Und es ist klar, dass foo den Wert des Ponters nicht ändert, weil er nicht per Referenz übergeben wird. Von Arrays und ihren Inhalten weiß der Compiler an dieser Stelle nichts.
-
Abgesehen davon, ist natürlich eine Klasse der Art
class Klasse { double* ptr; int n; public: Klasse(); ~Klasse() {delete ptr;} };doppelt Käse. Erstmal, wäre delete[] richtig gewesen und zweitens fehlen hier ein eigener Kopierkonstruktor und Zuweisungsoperator -- oder zumindest ein "Deaktivieren" dieser.
Besser wär natürlich
class Klasse { vector<double> vec; public: Klasse(); ... };