Array als Rückgabewert?

Liebe Experten,

ich habe eine Klasse die als Attribut (name: value) ein Array von std::bitset enthält. Dafür möchte ich eine get-Methode schreiben (also getValue), aber ich bin mir bei der Syntax nicht sicher. Kann man in C++ überhaupt ein Array zurückgeben? Falls nein, dann wohl eher einen Pointer? Bitset ist ja ein Template, wo muß ich dann mit den spitzen Klammern hin ()? Wie lege ich den Pointer innerhalb der Methode an?

Vielen Dank für eure Hilfe,

Sandra
PS: Bin eigentlich eher Java-Programmierer und stehe mit Pointern auf Kriegsfuß!

Hallo Sandra,

ich habe eine Klasse die als Attribut (name: value) ein Array
von std::bitset enthält.

Das heisst dann iirc ‚compound object‘ (Klasse in der Klasse).

Dafür möchte ich eine get-Methode schreiben (also getValue),
aber ich bin mir bei der Syntax nicht sicher. Kann man in
C++ überhaupt ein Array zurückgeben?

Zurückgeben kann man alles,

 std::bitset getBitset() const
{
 return myBitset;
}

allerdings wird bei dieser Operation das
gesamte Bitset ein oder mehrfach Wert für
Wert kopiert – je nach Art und Weise des
Aufrufs (ist das erwünscht?).

Falls nein, dann wohl eher einen Pointer?

Eher nicht. Das nennt sich dann in C++ „Referenz“.
Du übergibst der Methode getxxx() dann eine
„Referenz“ auf einen bereits vorhandenen Bitset,
in welchen dann die neuen Werte geschrieben werden.

 bool getBitset(std::bitset& bs) const
{
 bs = myBitset;
}

Wie lege ich den Pointer innerhalb der Methode an?

Ein „Pointer“ ist lediglich eine Variable, in der
die aktuelle Adresse des gewünschten Objektes steht.
Eine Referenz ist im Grunde dasselbe (s.o.), aber ohne
die „Pointerschreibweise“. Man kann also immer mit
dem Objekt selber „hantieren“ (manchmal über 100 Megabyte),
oder nur mit dessen Adresse (immer 32 bit -> und neuerdings
manchmal 64 bit)

PS: Bin eigentlich eher Java-Programmierer und stehe mit
Pointern auf Kriegsfuß!

Ich fahre eigentlich gern schnell Auto, stehe aber
mit Strahlturbinen auf Kriegsfuß!

Schreib doch bitte mal einen Ausschnitt aus Deinem
konkrreten Problem hier hin, dann kann man
vielleicht mehr sagen …

Grüße

CMБ

falsch verstanden?
Hallo Semjon,

ich glaube, du hast mich falsch verstanden. Ich möchte kein einzelnes Bitset zurückgeben, sondern ein Array, dass in jedem Feld ein Bitset (fester Größe) enthält. Wie müßte die get-Methode dann aussehen?

Vielen Dank für deine Hilfe,

Sandra

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Sandra,

ich glaube, du hast mich falsch verstanden. Ich möchte kein
einzelnes Bitset zurückgeben, sondern ein Array, dass in jedem
Feld ein Bitset (fester Größe) enthält. Wie müßte die
get-Methode dann aussehen?

Ach so.

Du hast wahrscheinlich sowas vor?

 ...
 std::vector \> bsv;
 ...

und dann ziehst Du Bitsets aus einer Klasse?:

 myObject.copyAllBitsetVectors( bsv );
 ..

wobei in der Klasse diese Methode so
definiert sein könnte?

 bool copyAllBitsetVectors(std::vector \>& r\_bsv) {
 
 for(i=0 ... myNumberOfBitsets... ++i) {
 r\_bsv.push\_back( myClassBitset[i]; // kopiere lokales bitset
 }
 ...

Aber wie gesagt, alles nur geraten :wink:

Schreib doch bitte mal einen Ausschnitt aus Deinem
konkreten Problem hier hin, dann kann man
vielleicht mehr sagen …

Grüße

CMБ

Hallo Semjon,

also ich habe eine Klasse Bitfeld:

template
class BitFeld {
// ---------------------------------------------------------------
// attributes
// ---------------------------------------------------------------
private:
std::bitset wert;
bitOrderT bitOrder;

}

und eine Klasse ByteFeld:
template
class ByteFeld {
// ---------------------------------------------------------------
// attributes
// ---------------------------------------------------------------
private:
int length;
ByteOrder byteOrder;
BitFeld value[N];

}
Die Objekte der Klasse ByteFeld sollen beliebig große Arrays (deswegen Template) sein mit Feldern, die Objekte der Klasse BitFeld der Länge 8 enthalten.
In der Klasse ByteFeld möchte ich eine get-Methode schreiben, die value (das Array mit den BitFeldern) zurückgibt.

bis jetzt habe ich das so:
template
inline XXXXXXXX ByteFeld::getValue() const {
return this->value; //???
}

Tja und hier weiß ich nicht, wie man den Rückgabewert angibt und was genau hinter „return“ stehen muß.

Vielen Dank für deine Hilfe,

Sandra

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]