「c++」と「演算子のオーバーロード」のタグを見たとき、マインドアラームがオンになります。
C ++演算子のオーバーロードは複雑であり、「()」や「->」などの一部の演算子はそれをより困難にします。
演算子をオーバーロードする前に、同じ目的でグローバル関数またはメソッドを作成し、それが機能することをテストして、後で演算子に置き換えることをお勧めします。
グローバルフレンド関数の例:
class c {
private:
int n[10];
public:
c();
~c();
// int operator()(int i) { return n[i]; }
// there is a friend global function, that when receives a "c" object,
// as a parameter, or declares a "c" object, as a local variable,
// this function, will have access to the "public" members of "c" objects,
// the "thisref" will be removed, when turned into a method
friend int c_subscript(c thisref, int i) ;
};
int c_subscript(c* thisref, int i)
{
return c->n[i];
}
int main()
{
c* objC() = new c();
// do something with "objcC"
int x = c_subscript(objC, 3);
// do something with "x"
return 0;
} // int main(...)
ローカル関数(「メソッド」)の例:
class c {
private:
int n[10];
public:
c();
~c();
// int operator()(int i) { return n[i]; }
int subscript(int i) ;
};
int c::subscript(int i)
{
return this.n[i];
}
int main()
{
c* objC() = new c();
// do something with "objcC"
int x = c->subscript(objC, 3);
// do something with "x"
return 0;
} // int main(...)
そして、最後にオーバーロードされた演算子を使用します。
class c {
private:
int n[10];
public:
c();
~c();
int subscript(int i) ;
int operator()(int i) { return this.subscript(i); }
};
int c::subscript(int i)
{
return this.n[i];
}
int main()
{
c* objC() = new c();
// do something with "objcC"
int x = c->subscript(3);
// do something with "x"
int x = c(3);
// do something with "x"
return 0;
} // int main(...)
最後の例では、メソッドを一意の識別子で保持していることに注意してください。
乾杯。