これはオペレータオーバーロードの規則の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
}
注意そのような方法で非公開のメンバーへのアクセス)、それらの実装は少し異なります。
演算子のオーバーロードは、最初の直感よりもはるかに複雑です。あなたの教師は、最初にかなり関わっているように、あなたにその上でエクササイズを割り当てる前にそれを越えていなければならず、多くの特別なケースがあります。確かにあなたの本にはセクションがあります。座って座って読むだけの簡単な方法はありません。 –
彼は決してそれを越えたことはなく、私たちは本も持っていません。だからこそ、私はここに来て、助けを求めようとしています。 – Cistoran
バマー。この無料の本には、[Thinking in C++](http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html)の第12章に全章が掲載されています。 -そう。 –