2017-03-26 5 views
0
struct nodo{ 
    int v,k,dist; 

    nodo(){ 
    } 

    nodo(int _v, int _k, int _dist){ 
     v=_v; 
     k=_k; 
     dist=_dist; 
    } 

    bool operator < (nodo X) const{ 
     return dist>X.dist; 
    } 
} 

私はこのコードを理解しようとしています。しかし、私はブール演算子の部分を取得しません。演算子のオーバーロードが発生しない

"return dist> X.dist"とはどういう意味ですか? distがX.distより大きい場合はtrueを返しますか?

+0

何が起こるかを見ることができました。これが、オーバーロード演算子が役に立ちます。 'nodeA.operator <(nodeB)'の中置関数の表記です。他のメンバー関数を呼び出すようです。 – BeyelerStudios

+0

オペレータのオーバーロードを説明しようとしていない、恐ろしい本やチュートリアルを使用していますか? –

答えて

1

"return dist> X.dist"とはどういう意味ですか? distがX.distより大きい場合はtrueを返します。

あなたはそうです。

演算子は通常のメンバー関数と変わらない。コンパイラは、その演算子を見つけると関数を実行するだけです。

あなたはprint文を入れて試してみて、それは利便性や「シンタックスシュガー」 `ノードA nodeB.dist`を書くことができるようにするためだ

bool operator < (nodo X) const{ 
    std::cout << "Operator < called" << std::endl; 
    return dist < X.dist; // I changed the sign because it looks more natural 
} 

// ... 

int main() { 
    nodo smallnode(1,2,3); 
    nodo bignode(4,5,6); 
    std::cout << "First node Vs Second Node" << std::endl; 
    if (smallnode < bignode) 
     std::cout << "It's smaller!" << std::endl; 
    else 
     std::cout << "It's bigger!" << std::endl; 
} 
関連する問題