作者OkeyBun (OK繃)
看板C_and_CPP
標題[問題] 類別的傳遞
時間Mon Sep 6 22:22:11 2010
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
為了寫一個處理大量浮動數據的程式而定義了幾個類別型態
主要分為讀檔用和輸出用兩種
為了將來擴充和整合上的方便
想要把讀檔功能完全用讀檔類別內的成員函數搞定
也就是在 main() 裡面寫入 input::read(); 就讀檔完畢
問題是...讀檔函式使用到的資料本身就是類別陣列
希望讀入後的數據能夠在 main() 裡面提取出來做處理運算
請問...這有辦法在不從外部傳入指標或參照的狀況下完成嗎??
(因為類別陣列的大小是浮動的 在讀檔過程中才能得到決定大小的資訊)
補充說明:
目前架構長這樣...
class orbital
{
public:
static int num_of_stste;
int atom_id;
double *energy;
double *int_s, *int_py, *int_pz, *int_px, *int_dxy...
orbital()
{
energy=new double[this->num_of_stste];
int_s=new double[this->num_of_stste]; <────┐
... ... |
}//初始化參數 |
|
static void read(void); |
}; |
|
void orbital::read(void){ //瘋狂讀檔區 |
|
ifstream ifile(filename,ios::in); |
... ... |
ifile>>orbital::num_of_state; //得到類別成員的數列大小來配置動態記憶體
ifile>>data_num; //得到類別陣列大小 data_num
... ...
orbital data[data_num]; //建立類別陣列
for(i...){for(j...){ifile>>data[i].orbit_s[j]>>data[i].orbit_p[j]....}}
... ...//進食數據迴圈
簡而言之... 本來想在 main()裡建立orbital物件再傳到 orbital::read() 裡接收資料
但參數初始化的陣列長度 num_of_stste 和類別陣列大小data_num
都是在讀檔的時候才知道
所以才會選擇把物件建立在 orbital::read() 內
但要傳回到 main() 裡與其他資料做合併計算就不得其門了...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.22.225
→ james732:函式內動態配置 (使用後記得釋放) 09/06 22:30
→ tinlans:類別陣列這東西在 C++ 做不出來吧。 09/06 22:47
→ tinlans:用最直接的基本語法來說的話。 09/06 22:48
※ 編輯: OkeyBun 來自: 118.165.21.231 (09/07 00:48)