Ich habe eine Klasse, die eine spezielle Nummer darstellt.Operator überladen Funktionen als Freund?
class SecretInteger
{
private:
unsigned int *data;
size_t length;
public:
SecretInteger operator+(const SecretInteger other) const;
}
ich keinen anderen Teil meines Codes haben Zugriff auf die data
Variable zulassen. Jedoch muss meine operator+
Funktion es sehen können. Normalerweise weiß ich in diesem Fall, dass die Verwendung des Schlüsselworts friend
der einzige Weg ist, dies zu tun. Allerdings, wenn ich schreibe:
friend SecretInteger operator+(const SecretInteger other);
Sie macht geltend, dass die operator+
nicht als Freund deklariert werden, obwohl ich vorher friend std::ostream& operator<<(std::ostream& stream, const SecretInteger val);
geschrieben habe und es funktioniert gut.
Welche Optionen habe ich für mich? Wenn ich eine öffentliche Methode wie
const *unsigned int getData() const;
habe ich denke, selbst dann macht es nicht tatsächlich die Variable zurückgegeben const
richtig? Ich würde wirklich lieber keine getData()
Methode haben und stattdessen nur die Funktionen deklarieren, die Zugriff haben als friend
.
Sie deklarieren 'Operator +' als eine Member-Funktion, so dass es auf Daten zugreifen kann, nicht wahr? – songyuanyao
~~ Es kann nicht auf 'andere' Daten zugreifen, die es mir unmöglich machen, arithmetisch zu arbeiten. ~~ – Hatefiend
Randbemerkung: Auch wenn Sie auf einer Memberfunktion für die Überladung bestehen, gibt es keinen Grund, das Argument zu akzeptieren Wert. Sicherlich 'const SecretInteger & andere' ist, was Sie wollen. – ShadowRanger