Ich möchte eine Klasse myVector definieren, die sowohl die Zuweisung operator=
als auch den Klammerzugriff z. B. myclass(1) = 0.5
unterstützt. Sehen Sie ein Dummy-Beispiel untenÜberladungszuweisung und runden Klammernoperator in C++
class myVector
{
public:
vector<double> _v;
myVector(unsigned int size) : _v(size, 0) { }
double& operator()(int i)
{
return _v[i];
}
unsigned int size() const { return _v.size(); }
myVector& operator=(const myVector& v)
{
_v.resize(v.size());
for(int i=0;i<v.size();i++)
_v[i] = v(i);
}
}
Dieser Code nicht da ()
kompiliert werden kann, ist nicht als konstante Funktion definiert. Dies liegt daran, dass ich die direkte Zuweisung wie myvector(1) = 2
aktivieren möchte. Um dieses Problem zu lösen, kann ich nur an zwei Lösungen denken. Man soll etw. Definieren. wie double getValue(int i) const
, aber das scheint seltsam, da einige doppelte Code hinzugefügt wird. Die andere ist const
aus der Signatur ()
Funktion zu entfernen, aber das ist auch nicht wünschenswert. Ich bin mir sicher, dass es eine gute Arbeit geben wird, aber ich kann es nicht finden.
Warum so kompliziert - Sie können einfach sagen '_v = v;', oder '_v.swap (v);'. –
diese runden Klammern werden "Klammern" genannt, und der Operator heißt "der Funktionsaufruf-Operator" –
Dies ist fast ein exaktes Duplikat einer früheren Frage. http://stackoverflow.com/questions/5762042/const-overloaded-operator-function-and-its-invocation/5762323. [Meine Antwort] (http://stackoverflow.com/a/5762323/179910) gilt auch hier. –