[問題] 類中要一直使用外部變量,代碼該怎寫?

看板C_and_CPP作者 (心靈震爆)時間15年前 (2010/09/25 19:42), 編輯推噓4(4016)
留言20則, 6人參與, 最新討論串1/1
在類中,會一直使用到一些外部變量。 因為要在兩個類都可使用/改變,所以不能列為類中的成員變量。 那請問要怎包裝比較適當呢? 我現在是用Get/Set的方式,這樣代碼看起來有點混亂啊。 用代碼講清處一點好了。 == _common.h == : int GetVariableOne(void); void SetVariableOne(int Variable); : == _common.cpp == int VariableOne; : /*Get/Set的實作*/ : == A.h == class A { public: A(void); ~A(void); int fun1(void); : };/*class A*/ : === A.cpp === #include "_common.h" int A :: fun1(void) { int var1 = GetVariableOne(); if(.....) SetVariableOne(...); : return 0; }/*fun1*/ 然後類似的class B也一樣這樣實作。 外部變量有點多,不過就只有Get/Set。 包成class似乎有點傻。 且這樣A的建構子要改寫(傳入外部變量的類),且還要有個成員變量 去存外部變量類的指針。 貌似沒什麼意義啊。。 不知道在慣常上,是怎處理這種使用共用變量的情況。 還情高手指點啊,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.43.135.230

09/25 19:51, , 1F
文中用詞..似乎是在對岸學習的同仁?? XD
09/25 19:51, 1F

09/25 19:52, , 2F
我台灣人。。只是我從電腦白吃到靠編程吃飯全看簡體書。
09/25 19:52, 2F

09/25 19:59, , 3F
同化的蠻厲害的, 推一個 XD
09/25 19:59, 3F
※ 編輯: mindblast 來自: 115.43.135.230 (09/25 20:06)

09/25 20:16, , 4F
你如果不想用一個資料成員來參考到該物件, 那麼只能用
09/25 20:16, 4F

09/25 20:17, , 5F
Singleton pattern 來確保類物件的共用了
09/25 20:17, 5F

09/25 20:22, , 6F
包成結構一點也不傻...而且看來這個情況那些變數是有
09/25 20:22, 6F

09/25 20:23, , 7F
點關係的(不然你也不會想要共用他們)
09/25 20:23, 7F

09/25 22:56, , 8F
class SAB{int m_V1};class A : public SAB{};
09/25 22:56, 8F

09/26 01:36, , 9F
樓上這個好像和原PO要的不太一樣...
09/26 01:36, 9F

09/26 01:36, , 10F
原PO要的是兩個class共用一個外部變數
09/26 01:36, 10F

09/26 02:43, , 11F
是的 我不是要繼承既有的內部變量
09/26 02:43, 11F

09/26 08:57, , 12F
繼承也是可以, 不過要用靜態成員 http://ppt.cc/gnI9
09/26 08:57, 12F

09/26 08:59, , 13F
不過這種方式知道怎麼用就好, 在呼叫的時候多打一點字
09/26 08:59, 13F

09/26 08:59, , 14F
不會死人
09/26 08:59, 14F

09/26 09:22, , 15F
清楚的寫法比方便的寫法更有利於未來, 原PO自己評估吧
09/26 09:22, 15F

09/26 10:16, , 16F
請問loveme00835 auto_ptr 是STL的東西吧?
09/26 10:16, 16F

09/26 10:18, , 17F
該示例是用STL,自動把指針聯結在一起?
09/26 10:18, 17F

09/26 13:04, , 18F
我發現我會浪費一些空間, @_@ 還要多寫一個類別, 用
09/26 13:04, 18F

09/26 13:05, , 19F
auto_ptr 來減少靜態變數, 把它們都放在堆積中
09/26 13:05, 19F

09/26 14:49, , 20F
簡單來說只要記住「打愈多字愈好」就是了! (誤)
09/26 14:49, 20F
文章代碼(AID): #1CdU0j_K (C_and_CPP)