C ++の - >*オペレーターとは何ですか?
-
21-09-2019 - |
質問
C ++は私を驚かせ続けています。今日、私は - >*オペレーターについて知りました。それは過負荷ですが、私はそれを呼び出す方法がわかりません。私はクラスでそれを過負荷にすることができましたが、それをどのように呼ぶかはわかりません。
struct B { int a; };
struct A
{
typedef int (A::*a_func)(void);
B *p;
int a,b,c;
A() { a=0; }
A(int bb) { b=b; c=b; }
int operator + (int a) { return 2; }
int operator ->* (a_func a) { return 99; }
int operator ->* (int a) { return 94; }
int operator * (int a) { return 2; }
B* operator -> () { return p; }
int ff() { return 4; }
};
void main()
{
A a;
A*p = &a;
a + 2;
}
編集:
答えのおかげです。私が書いた過負荷機能を呼び出すために
void main()
{
A a;
A*p = &a;
a + 2;
a->a;
A::a_func f = &A::ff;
(&a->*f)();
(a->*f); //this
}
解決
過負荷 ->*
オペレーターはバイナリ演算子です(しばらくします .*
過負荷ではありません)。それは通常のバイナリ演算子として解釈されるので、その演算子を呼び出すためにあなたの元のケースでは、あなたは次のようなことをしなければなりません
A a;
B* p = a->*2; // calls A::operator->*(int)
Piotrの答えで読んだものは 組み込み オーバーロードされたオペレーターではなく、オペレーターではありません。追加の例であなたが呼ぶものも 組み込み オペレーターは、過負荷のあるものではありません。オーバーロードされたオペレーターを呼び出すには、上記の私の例で私がしていることをしなければなりません。
他のヒント
と同じように .*
, ->*
メンバーへのポインターとともに使用されます。セクション全体があります C ++ FAQ Liteで ポインターからメンバーに捧げられています。
#include <iostream>
struct foo {
void bar(void) { std::cout << "foo::bar" << std::endl; }
void baz(void) { std::cout << "foo::baz" << std::endl; }
};
int main(void) {
foo *obj = new foo;
void (foo::*ptr)(void);
ptr = &foo::bar;
(obj->*ptr)();
ptr = &foo::baz;
(obj->*ptr)();
return 0;
}
他のopperatorと同様に、明示的に呼び出すこともできます。
a.operator->*(2);
所属していません StackOverflow