當我看到標籤「C++」和「運算符重載」,我的心報警接通。
C++運算符重載是複雜的,一些運營商等「()」或「 - >」變得更加困難。
我建議,運算符重載,使得無論是全局函數或方法具有相同purpouse之前,測試它的工作原理,以及後來與運營商更換。
全球友元函數例如:
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(...)
注意,在最後一個例子,我保留了一個唯一標識符的方法。
乾杯。
爲什麼擺在首位這麼多球?這可能是更有建設性的固定編碼風格,而不是擔心爲什麼一個十分可怕的一段代碼看起來...真的醜。 –