2016-05-18 1 views
-2

私はC++でbigIntクラスを作成しました。いくつかの演算子をオーバーロードしている間、私はオブジェクトそのものを引数として渡す必要があります。私は*thisでこれを行うことができることを知っています。私は同じメンバ変数を持つ同じクラスの別のオブジェクトを作成し、それを引数として渡すこともできます。しかし、私は*thisをスキップして別のオブジェクトを作成できない方法はありますか?ここで オブジェクトをそのメンバ関数の1つに引数として渡すにはどうすればよいですか?

*thisを使用して、私が作ったコードです:

using namespace std; 
class bigInt { 
private: 
    string value; 

public: 
    template<class T> 
    bigInt(T x) { 
     //.... .... ....constructor 
    } 

    bigInt operator+ (bigInt num) { 
     //... ... ... my code here 
    } 

    template<class T> 
    bigInt operator+ (T x) { 
     return *this + bigInt(x); 
    } 
}; 

そして、ここで私はクラスBIGINTの別のオブジェクトを作成したコードです:

using namespace std; 
class bigInt { 
private: 
    string value; 

public: 
    template<class T> 
    bigInt(T x) { 
     //.... .... ....constructor 
    } 

    bigInt operator+ (bigInt num) { 
     //... ... ... my code here 
    } 

    template<class T> 
    bigInt operator+ (T x) { 
     return bigInt(value) + bigInt(x); 
    } 
}; 

私が行うことができる方法を教えてください*thisを使用せずに同じものを作成するか、別のオブジェクトを作成しますか?

N.B.私は、thisポインタを使用することは、一般的にプログラミングの習慣としては不適切だと聞いています。それは本当ですか、そうではありませんか?それが本当であれば、悪い習慣とはみなされない場合がありますか?

+3

"このポインタは一般的に悪いプログラミング実践と見なされています"という参照/リンクがありますか?現在のオブジェクトを参照する必要があるときは、正確に正しい方法であると確信しています –

+0

メンバ関数ではなく名前空間スコープの 'operator +'を使用するのはなぜですか? –

+1

適切なところで '* this'を使うことは何も問題ありません。あなたはおそらくconst参照としてあなたのパラメータを渡すべきです。 – md5i

答えて

0

テンプレート演算子+は余分です。ただそれを削除します。他のニュースで


  • も不要な非効率性を避けるためにbigInt operator+ (bigInt const& num)bigInt operator+ (bigInt num)を変更することを検討してください。

  • また、引数の順序が重要でないように、関数をfriendにすることを検討してください。

+0

私の元のコードでは、私はテンプレートoperator +を使用しませんでした。私はここに私が持っている問題を表現するために使った。しかし、提案をありがとう。 –

+0

友人の機能を詳しく教えていただけますか?どのように私はパラメータとしてオブジェクトを渡すのに役立ちますか? –

+0

@TanmoyKrishnaDas:私は本当のコードを与えていないあなたの質問をd​​ownvotingですが、むしろ自分自身が*無関係であると考えるコードをdownvotingしています。 –

関連する問題