Ich machte eine Klasse Array, die ein Integer-Array enthält. Von der Hauptfunktion versuche ich, ein Array-Array in Array mit [] zu verwenden, wie wir es für Arrays tun, die in main deklariert sind. Ich habe den Operator [] wie im folgenden Code überladen; Die erste Funktion gibt einen L-Wert und den zweiten Teil einen rvalue (Konstruktoren und andere Mitgliedsfunktionen sind nicht gezeigt.)C++ Operatorüberladung [] für lvalue und rvalue
#include <iostream>
using namespace std;
class Array {
public:
int& operator[] (const int index)
{
return a[index];
}
int operator[] (const int index) const
{
return a[index];
}
private:
int* a;
}
jedoch bei dem Versuch, diese beiden Funktionen von Haupt zu nennen, werden nur die erste Funktion ist, selbst zugegriffen wird, wenn Die Variable wird nicht als L-Wert verwendet. Ich kann nicht den Punkt sehen, eine separate Funktion für einen rvalue zu erstellen, wenn alles durch die lvalue-Funktion erledigt werden kann.
Der folgende Code ist die Hauptfunktion I verwendet (Operator < < in geeigneter Weise überlastet ist.):
#include "array.h"
#include <iostream>
using namespace std;
int main() {
Array array;
array[3] = 5; // lvalue function called
cout << array[3] << endl; // lvalue function called
array[4] = array[3] // lvalue function called for both
}
Gibt es eine Möglichkeit, die R-Wert-Funktion aufrufen kann? Ist es auch notwendig, Funktionen für Lvalue und Rvalue zu definieren?
Die Operatoren sollten wahrscheinlich als 'int &' und 'const int &' und nicht als 'Array' deklariert werden. –
Ja, du hast Recht. Mein Fehler – HelperKing