2011-03-09 11 views
0

私は基本的なプログラミングIIクラスです。私たちは、オペレーターの働き方を変える4つの異なる機能を作るプログラムを作らなければなりません。私は複数の例とこれを行う方法を表示するテキストのセットを調べましたが、コードの意味を決めることはできません。私にはこのような何かが働くはずです。オペレータC++でのオーバーロード

int operator++() 
{ 
    variableA--; 
} 

私には、++に遭遇した場合、変数から、明らかにこのようには機能しません。私が見つけたすべての例は、独自のデータ型を作成します。 intまたはdoubleを使用してオペレータを過負荷にする方法はありますか?

+0

演算子のオーバーロードは、最初の直感よりもはるかに複雑です。あなたの教師は、最初にかなり関わっているように、あなたにその上でエクササイズを割り当てる前にそれを越えていなければならず、多くの特別なケースがあります。確かにあなたの本にはセクションがあります。座って座って読むだけの簡単な方法はありません。 –

+0

彼は決してそれを越えたことはなく、私たちは本も持っていません。だからこそ、私はここに来て、助けを求めようとしています。 – Cistoran

+0

バマー。この無料の本には、[Thinking in C++](http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html)の第12章に全章が掲載されています。 -そう。 –

答えて

6

これはオペレータオーバーロードの規則の1つであるため、すべての例で独自のデータ型が作成されます。An overloaded operator must work on at least one user-defined type

++に整数をオーバーロードすることができたとしても、コンパイラはどのバージョンを使用するかを知ることはできません。それは曖昧です。

演算子は単一の関数と考えるようですが、それぞれのオーバーロードは、その関数シグネチャ(型と時には引数の数)によって区別され、同じ演算子シンボルを持つ完全に別個の関数です(これは "オーバーロード")。

したがって、++に常に異なる処理を実行することはできません。これは実際にはC++が許さないオペレータオーバーライドです。

あなたはあなたがが作成したタイプに++を定義することができます++演算子のこのセットはがMyTypeクラスの外で定義されていたが、(彼らが得るでしょう代わりに、内部に定義されている可能性があること

class MyType { 
public: 
    int value; 
}; 

MyType const& operator++(MyType& m) { // Prefix 
    ++m.value; 
    return m; 
} 

const MyType operator++(MyType& m, int) { // Postfix (the 'int' is just to differentiate it from the prefix version) 
    MyType temp = m; 
    ++m.value; 
    return temp; 
} 

int main() { 
    MyType m; 
    m.value = 0; 
    m++; // Not m.value++ 
    cout << m.value; // Prints 1 
} 

注意そのような方法で非公開のメンバーへのアクセス)、それらの実装は少し異なります。

+0

最も優れている、これは私が探していたものとほぼ同じです。私は+、 - 、そして/働いていましたが、私はModをやってみることを考えていましたが、それはおそらく私が意図した以上の仕事でした。とても有難い。 – Cistoran

1

を見てみましょう。 (技術的には、 "int + MyClass"のようなものをオーバーロードすることができますが、両側が組み込み型ではない場合)