2016-05-18 56 views
-2

我在C++中創建了一個bigInt類。在重載一些運算符的同時,我需要將對象本身作爲參數傳遞給它的一個成員函數。我知道我可以用*this來做到這一點。我也可以通過創建具有相同成員變量的同一個類的另一個對象並將其作爲參數傳遞給它。但有什麼辦法可以跳過*this,也不會創建另一個對象?如何將對象作爲參數傳遞給其某個成員函數?

下面是使用*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'沒有任何問題。儘管如此,你應該可能會將你的參數作爲常量引用傳遞。 – md5i

回答

0

模板化的操作符+是多餘的;只是刪除它。


其他消息:

  • 考慮也改變bigInt operator+ (bigInt num)bigInt operator+ (bigInt const& num)以避免不必要的低效率。

  • 此外,考慮使它成爲friend函數,以便參數順序無關緊要。

+0

在我的原始代碼中,我沒有使用模板化的運算符+。我在這裏用它來表達我的問題。 (還是)感謝你的建議。 –

+0

能否詳細說明好友功能?它如何幫助我將對象作爲參數傳遞? –

+0

@TanmoyKrishnaDas:我對你的問題沒有給出真正的代碼,而是你自己認爲是不相關的代碼。 –

相關問題