2012-11-01 90 views
-1

我會嘗試和正確地說出這句話。如有需要,請要求澄清。通過班級之間的信息

我有一個類(我們將其稱爲類a),它有一個方法,用ifstream打開一個文件並從該文件讀取數據。我還有另一個班級(我們稱之爲班級b)。我需要從a級獲取這些信息並將其傳遞給b級。從b類調用這個方法。我想從A->我可以

  1. 申報繼承b
  2. 聲明友元函數或
  3. 只是聲明類B中的無功具類的種類和使用a.function運行的功能。

但無論如何,結果總是輸出一個?如果我自己運行類a,它會正常運行(讀取數據並輸出數據)。

你不能在類之間使用infile.get運行函數嗎?

+1

這有點令人困惑。你能把這兩種情況(工作/不工作)顯示爲「代碼」嗎? – egrunin

+0

代碼的不同部分之間的信息傳輸唯一可能的形式(不包括globals .. yuck)是傳遞給函數的參數。你能(像egrunin建議的那樣)顯示不能按預期工作的代碼(以及預期的行爲)? – Mankarse

+0

一個示例用例會很好。理想情況下,所有類似的工作(開放文件,處理數據等)應該由一個類來執行,以保持相互依賴(耦合)低和內聚性高。 – xbonez

回答

0

通常,您應該在兩個類之間定義一個API。在這種情況下,您的API可以是B類中的一個方法,該方法期望從A類調用您需要傳輸的數據。類似這樣的:

//B header file 
struct dataType; 
class B 
{ 
    //... 
public: 
    statusType passData(dataType &x); 
}; 

//A header file 
struct dataType //shared data type between the 2 classes 
{ 
    //internal structure of your data 
}; 

class A 
{ 
    B *objB; //link to B instance (the receiver) 
    statusType acquireData(); 
}; 

//cpp file 
#include "A.h" 
#include "B.h" 
statusType B::passData(dataType &x) 
{ 
    //do whatever you need with the data 
} 

statusType A::acquireData() 
{ 
    //do your reading from file here into x 
    objB.passData(x); 
} 

這個例子演示了在A類和B類之間創建簡單的接口。 任何其他更緊密的關係,如繼承或組合,也是可能的,但這實際上取決於您的要求,並意味着比您陳述的更強烈的關係。否則它會(即使工作)出現設計缺陷。