Array als RW
-
hallo,
ist es eigentlich möglich ein Array als RW einer Funktion zu haben. Ich hab noch im Hinterkopf von früher da war irgedwas mit Pointer wenn man mehr als ein Wert als RW haben möcht aber ich weiß nicht mehr so genau was das war. Und wenn ich ein Array als Membervariable habe mit dem zugriff private könnte ich doch eine Funktion schreiben, die mir im Programm die Anfangsadresse des Arrays zurückgibt. Hätte ich da aber nicht die private Beschränkung ausgehebelt?
Grüße
-
ist es eigentlich möglich ein Array als RW einer Funktion zu haben
prinzipiell ist das möglich aber man macht das normalerweise nicht
Und wenn ich ein Array als Membervariable habe mit dem zugriff private könnte ich doch eine Funktion schreiben, die mir im Programm die Anfangsadresse des Arrays zurückgibt. Hätte ich da aber nicht die private Beschränkung ausgehebelt?
Was willst du überhaupt machen? Wenn das nicht gewollt ist hast du halt nen Designfehler.
Formulier mal eine Frage so das ein andere überhaupt weiss was genau du wissen willst.
-
Was ich machen will? Mein Wissen über C++ erweitern.
aber wenn du nicht verstehst was ich mein schließ nich gleich von dir auf andere. Eine Memberfunktion ist doch ne funktion oder? Also muss man erst mal prüfen ob es überhaupt möglich ist sowas als RW zu haben? Einverstanden?
Nun wenn es möglich ist ist es doch relevant was die Wirkung ist wenn ich diesen Mechanismus auf eine private Variable anwende. Wenn ich dadurch einen öffenlichen Zugriff auf ein private Element bekomme brauche ich den Weg nicht weiter zu verfolgen. Was ich im Endeffekt damit programmieren möchte weiß ich noch nicht. Ich habe gerne erst mal ein detailliertes Wissen über die Sprache, damit ich später konkrete Problem den sprachregeln entsprechend effizient programmieren kann.
Danke und cu
-
Ich hab noch im Hinterkopf von früher da war irgedwas mit Pointer
Da hast du Recht. Du gibst einen Zeiger auf das Anfangselement zurueck und greifst dann damit auf das Array zu.
[...]Hätte ich da aber nicht die private Beschränkung ausgehebelt?
Prinzipiell ja, das ist aber immer der Fall, wenn man Pointer oder Referenzen zurueckgibt. Machst du sie const sollte man aber nur lesend darauf zugreifen koennen, was dann ja wieder in Ordnung waere.
Gruss,
DeSoVoDaMu
-
Verpack das Array einfach in ein struct und gib das zurück. So wie ich dich verstehe, geht es um Arrays mit fester Größe, und da ist das die sinnvollste Lösung - Finger weg von Zeigern.
-
operator void schrieb:
Verpack das Array einfach in ein struct und gib das zurück.
und dann noch 'nen operator[] mit rein, damit's nicht auffällt.
naja, da verlääst man sich schon darauf, dass der compiler das optimiert sonst kann's ganz schön lahm und speicherfressend sein
-
Laut OOP definiert man ja Methoden zu lesen und setzen der Membervariablen. Ich wollte eigenlich wissen was denn die Konvention ist wenn ich ein Array als Membervariable habe. Wie dann die Zugriffsmethode aussieht. Nehmen wir mal das beispiel
Memvervariable int array[5];Wenn ich einen einzelnen wert haben möchte klar mach ich ne Methode mit einem Parameter der den Index angibt. Ich könnte ja auch eine Schleife einbauen und die länge des Arrays dann als Parameter übergeben und mir alle Werte nacheinander ausgeben lassen. Oder ich könnte auch die mir einen Zeiger zurückgeben lassen und dann die Werte nacheinander abfragen so wie unten
der getArray
(const)int* getArray() { return array; }
Womit ich aber die Beschränkung ausgehebelt habe. Das ich aber nach einem Posting wieder durch einen const Pointer kompensieren könnte. Nun kommt noch der Vorschlag mit der Struktur.
Ich meine vor diesem Problem wird sicherlich schon mal jemand gestanden sein, weil ich denke das das eine alltägliche Programmieraufgabe ist.
Was wird denn da im Normalfall als Lösung genommen? Und noch was. Gibt es eine möglichkeit die Länge eines Arrays zu ermittelt? So wie in Java quasi mit Array.length. Und wenn ja wie heißt diese Funktion und in welche headerdatei muss ich einbinden?
Danke und cu
-
Was wird denn da im Normalfall als Lösung genommen?
Nun, ich denke schon, dass die Sache mit dem Pointer die "normale" Loesung ist. Du kannst auch das vector Template der STL nutzen und gibst dann eine const Referenz zurueck - immerhin ist das das C++ Forum
Damit lassen sich auch die anderen Probleme loesen:
Gibt es eine möglichkeit die Länge eines Arrays zu ermittelt? [...] wie heißt diese Funktion und in welche headerdatei muss ich einbinden?
Funktion heisst size(), zu finden in <vector> (also sie gehoert zu dem Klassen Template vector)
Bei normalen (dynamischen) C Arrays muss man sich die groesse merken. Sind sie statisch kann man sie mit sizeof(Array) / sizeof(Array[0]) berechen.Gruss,
DeSoVoDaMu
-
net schrieb:
und dann noch 'nen operator[] mit rein, damit's nicht auffällt.
naja, da verlääst man sich schon darauf, dass der compiler das optimiert sonst kann's ganz schön lahm und speicherfressend seinStatische Arrays sind bei mir eher selten riesig. Das größte boost::array, das ich mal zurückgegeben habe, hatte eine Größe von 8 (jeweils ein Byte pro Element).
-
Danke für die Infos
cu
-
Verwende lieber deque oder vector.
Wenn du dein C++ erweitern willst, lerne mal die STL.
www.cppreference.comGhost