逆参照演算子(operator*
)のオーバーロードの場合、メンバー選択演算子(operator->
)はオーバーロードされた演算子を使用しますか?オーバーロードされた逆参照演算子を使用したメンバーの選択
3
A
答えて
4
矢印演算子を別にオーバーロードする必要があります。より一般的には、たとえC++の関連する演算子間で素晴らしいマッピングがあっても、演算子のオーバーロードがあっても、残りの部分は "無償"でオーバーロードされず、自分で実装する必要があります。
T* Class::operator ->() const {
return &**this;
}
これは、その後のアドレスを取って、operator *
を起動することを間接参照し、その後、レシーバオブジェクトへの参照を取得するためにthis
を逆参照することによって動作します:それは逆参照の面で矢を実装するのは簡単だ、と述べた
返された参照は、矢印が適用されるべきオブジェクトへのポインタを取得します。
Boost.Operatorsライブラリを調べると、少数の基本操作から論理的に関連する多くの演算子を自動的に定義できます。
希望は役立ちます!
0
あなたは本質的にオーバーロードされた逆参照演算子を実装できますが、オーバーロードされた演算子が動作するためには2回推論する必要があります。クラスX
へのポインタ「E1
タイプを持っている場合、 『
0
5.2.5は、』次に発現E1->E2
は、等価形態(*(E1)).E2
に変換されます」。問題はあなたの場合、E1
はではなく、のポインタです。
関連する問題
- 1. オーバーロードされたポストインクリメント演算子内の変数の結果を使用してオーバーロードされたプリインクリメント演算子
- 2. C++での演算子のオーバーロードと逆参照
- 3. オーバーロードされた演算子のオーバーロード
- 4. C++クラス演算子オーバーロード参照
- 5. プリインクリメント演算子を使用したポインタの逆参照へのポインタ
- 6. ラージオブジェクトの演算子オーバーロードのための参照とポインタの使用
- 7. 演算子のオーバーロードC++参照または値
- 8. オーバーロードされた+演算子の連結
- 9. オーバーロードされた後置インクリメント/デクリメント演算子のostream演算子のオーバーロード
- 10. フレンドクラスとオーバーロードされた演算子
- 11. オーバーロードされた括弧演算子
- 12. コンテナにオーバーロードされた演算子を使用する
- 13. 時間にオーバーロードされた演算子を使用する
- 14. オーバーロードされた静的演算子の使用方法
- 15. 演算子のオーバーロードを使用した行列の加算
- 16. オーバーロードされた加算演算子を使用するのが難しい
- 17. メンバー関数vs演算子オーバーロード
- 18. オーバーロードされた代入演算子を使用した単一リンクリストのクローン
- 19. オブジェクトのメンバーのための比較演算子のオーバーロード
- 20. Pythonでブール演算子を使用するためのビット演算子のオーバーロード
- 21. オーバーロードされた算術演算子を使用して、オーバーロードされた抽出演算子をカスケードすることは可能ですか?
- 22. ポインタを使用したオーバーロードされた挿入/抽出演算子
- 23. 演算子のオーバーロード演算
- 24. C++でネストされたオーバーロードされた演算子 - >()
- 25. 差別化された共用体の演算子オーバーロード
- 26. 乗算演算子をメンバー関数としてオーバーロードする
- 27. 参照メンバーを持つ内部クラスのデフォルト代入演算子
- 28. 汎用継承とオーバーロードされた演算子+
- 29. オーバーロード演算子+
- 30. 演算子オーバーロード==
実際にはoperator->?の "デフォルト実装"はありません。 – Paranaix
@ Paranaix-いいえ、残念ながらそうではありません。より一般的には、他の関連演算子からその演算子を実装する合理的な方法があるとしても、オーバーロードされた演算子のデフォルト実装はありません(代入演算子を保存しません)。 – templatetypedef
もちろん、単項 '演算子*'は 'operator->': 'return *(this-> operator->());'の形で簡単に実装できます。 C++ではどちらを他のものに関して実装するべきか、どちらがどちらかを見てからもう一方のデフォルトを提供するのか気にしません。他の演算子と同様に、複数の方法があります: 'operator- ='、または単項 'operator-'とバイナリ 'operator +'に関してバイナリ 'operator-'を実装しますか? C++では、 "基本操作"が何であるかを教えてくれませんし、あなたが思っていることを理解しようとしません。それは一貫性があり、役に立たない場合です。 –