2012-03-01 19 views

答えて

2

@Mysticialが指摘したように、あなたがこれを行うにはoperator>>をオーバーロードする必要があります。

そのオーバーロードはではなく、でもmyClassのメンバーになります。それは、someClassのメンバーであるか、またはグローバルオーバーロードでなければなりません。

class someClass { 
// ... 
    someClass &operator>>(myClass &); 
}; 

か:

someClass &operator>>(someClass &, myClass &); 

オペレータは/ someClassオブジェクトの状態を変更することはできませんしない場合は、その場合には(const参照であなたを最初のパラメータを渡すこともできますまた、const参照を返します)。

もちろん

someClassを返すことは、本当に必要な、それはオペレータのこの種の通常許容されるプラクティスですされていません(それはa >> b >> c;のようなもののための演算子をチェーンできます)

+0

myClassを編集してsomeClassが送信するものを「受信できる」ようにするにはどうすればよいですか?私はいくつかのクラスを編集することはできません。 – Cheetah

+0

上で示したように、 'someClass'だけを残しておかなければならない場合は、グローバルなオーバーロード(しばしば' myClass'の友人)を作る必要があります。 Mehrdadが指摘しているように、ネームスペースを使用している場合、ADLが必要です(myClassと同じネームスペースに入れたいと思うでしょう)。 –

0

あなたはargument-dependent lookupを使用する必要があります...私はそれを頻繁に使用していませんが、operator >>にADLをオーバーロードする必要があります(リンクを参照)。

2

>>です。あなたはオーバーロードしたいoperator>>。署名は次のようになります。

someClass& operator>>(someClass&, myClass&); 
関連する問題