2014-01-10 60 views
0

我有這樣的功能:如何將同一個類中的兩個值從一個函數傳遞給另一個函數?

void fraction::init() 
{ 
    cout<<"enter the values for the numerator and denominator\n"; 
    cin>>num; 
    cin>>denom; 
} 

,我想在操縱他們另一個函數中使用這兩個數字。 我該如何把他們帶到這個其他功能? 注意:這兩個函數都是相同的類。

+0

老實說,這個問題說明你缺乏依據關於類是如何工作的,應當使用因爲,試着找一本好書。 – Antonio

回答

4

簡單地將它們定義爲類的成員:

class fraction { 
private: 
    int num; 
    int denom; 

public: 
    void init();   // has access to num and denom 
    void otherMethod(); // also has access to num and denom 
}; 

你也應該不依賴於init()被調用到初始化變量有默認值,你也應該不依賴於各種默認初始化由C++提供,參見Default variable value

相反,添加一個構造函數,用於設置變量的默認值,以確保已創建類的對象之後,這些變量的合理值。然後,你仍然可以調用init()設置任何你想要的值(也許你應該重新命名init()爲類似readValues(),以反映該方法確實)。

-1

這取決於你將如何使用這些功能。由於都屬於同一類,可以使類numdenom(私有)的成員。但如果這些值來自課外,也可以使用引用。不管這將工作的屬於同一類或沒有的功能:

class fraction 
{ 
public: 
    void init(int& num, int& denom) const; 
    void otherFunction(int num, int denom); 
} 

void fraction::init(int& num, int& denom) const 
{ 
    cout<<"enter the values for the numerator and denominator\n"; 
    cin>>num; 
    cin>>denom; 
} 

// Define otherFunction() appropriately 

然後在另一段代碼使用這些功能:

// ... 
int aNum, aDenom; 
fraction fr; 
fr.init(aNum, aDenom); 
fr.otherFunction(aNum, aDenom); 
// ... 
+0

你建議的最終用途可能是正確的,但是這是非常危險的,這是真的表明,在這種特殊情況下成員變量(初始化一次一小部分必須擁有自己的分子和分母) – Antonio

+0

@Antonio的情況:如果'fraction'是真的一個分數,'num'和'denom'是它的分子和分母,那麼顯然它們應該是數據成員。但是,在這種情況下,問題僅僅是面向對象編程的絕對基礎。所以我寧願不考慮這些名稱的可能含義,並認爲這只是一個設計不當的例子。 – Gorpik

+1

「面向對象編程的絕對基礎」通常指出Init函數是壞消息。 –

-1

要麼讓他們的類的成員,那麼多建議,或者你可以嘗試在需要時傳遞它們。如果你想讓它們的值反映變化,請通過引用傳遞它們。

datatype function1(int *a, int *b) 

然後當你由init調用它們()函數,

function1(&num, &denom) 

希望這有助於

+2

使用指針引用傳遞的這種方式是類似C,檢查以前的答案的例子,知道如何正確地做它在C++ – Antonio

相關問題