0

ここに、演算子のオーバーロードの明確な例がいくつかあります。構文は次のとおりです。

type operator sign (parameters) { /*...*/ }

私が取り組んでいるコードで、次の文字列が見つかりました。

bool operator () (int a)

このコードで私が抱えている最初の問題は、演算子記号がないことです(operator+またはのようなものはありませんoperator*)。(int a)2番目の問題は、私が見た議論の前で、()それが何をすべきかを知ることができないということです。それを手伝ってくれませんか。

4

3 に答える 3

7

演算子記号がないことについては間違っています。演算子は()演算子です。2組の括弧があることに注意してください。最初のセットは関数名の一部でoperator ()あり、2番目のセットはその演算子への引数です。

オーバーoperator ()ロードは、関数であるかのように定義されているオブジェクトを使用するたびに呼び出されます。検討:

struct greater_than_five
{
  bool operator()(int x) const { return x > 5; }
};

このクラスはoperator ()オーバーロードされているため、5より大きい整数を渡すと、が返されますtrue。あなたはそれを次のように使うことができます:

greater_than_five f;
if (f(10)) {
  // 10 is greater than 5
}

fは関数ではなく、型のオブジェクトですが、を使用して関数のように呼び出すことgreater_than_fiveができることに注意してください。これはばかげた例ですが、そのようなクラスの使用法を示しています。これらのクラスは、一般にファンクターまたは関数オブジェクトとして知られています。f(10)

于 2013-02-26T17:16:03.910 に答える
4

これは、その演算子を持つクラスのインスタンスを、関数の構文のような構文で呼び出すことができることを意味します。このクラスはファンクターと呼ぶことができます:

struct Foo
{
  bool operator () (int a) { std::cout << "Foo " << a << "!\n"; }
};

それから

Foo f;
f(42); // prints "Foo 42!"

このoperator()部分は、演算子を使用して呼び出すことができることを意味し()ます。次は、単純な関数のパラメーターリストに類似したパラメーターリストです。

于 2013-02-26T17:16:28.543 に答える
1

演算子「()」は括弧演算子です。オーバーロードして、任意の型と任意の数のパラメーターを受け取ることができます。次に例を示します。

class Vector3
{
public:
Vector3(float x, float y, float z)
{
    _data[0] = x;
    _data[1] = y;
    _data[2] = z;
}

float& operator() (const int component)
{
    assert(component >= 0 && component < 3);
    return _data[component];
}

private:
    float _data[3];
};

使用法:

Vector3 vec(3.0, 1.0, 2.0);
vec(2) = 0.5;
cout<<"Third component : "<<vec(2);

プリント 0.5

于 2013-02-26T17:34:25.857 に答える