如果說"STRUCT/ UNION 等都是 CLASS 的變種"
最好還是不要有這樣的想法
定義上和運作上是有所不同的

union在ms的platform sdk裡面還是會有用到
不過現在越來越少人用了
因為記憶體不值錢 Orz..
實在沒有必要特別去使用union
以免造成日後維護或除錯上的困擾
(特別是程式換人寫之後...)


refactoring(重構)
我想樓主剛學C++
應該還先不用學這個吧 :p
看題目,感覺比較像是

class CStaff { // you can use struct here if you like.
public:
 char m_szName[16];
 char m_szId[8];
 char m_cSex;

 union {
  unsigned int uiTypingSpeed;
  bool bFinishMilitaryService;
 } m_Special;
}

But I think the member variables should be put into private or protected section and add some member functions to set/get these variables. For example,

class CStaff { // you can use struct here if you like.
public:
 void SetName(const char *name, size_t nameSize);
 void SetId(const char *id, size_t idSize);
 void SetSex(char sec);
 void SetSpecial(unsigned int typingSpeed);
 void SetSpecial(bool service);
 const char *GetName();
 const char *GetId();
 char GetSex();
 unsighted int GetTypingSpeed();
 bool GetMilitaryServiceState();

private:
 char m_szName[16];
 char m_szId[8];
 char m_cSec;

 union {
  unsigned int uiTypingSpeed;
  bool bFinishMilitaryService;
 } m_Special;
}


Happy Coding!
libraleu wrote:
手癢, 改了一下程式...(恕刪)


+1

姓名和代號是同一個記憶體位置,所以在輸入代號時,就把姓名覆蓋掉了。
這個是基本的 struct union 的觀念, 建議你自己看書..
從書本裡面去找答案.. 不然. 總有同學可以問吧..

如果專業不夠, 那請加強 EQ 與人際溝通方面..
別老上網想得到速成的答案..


houcheng wrote:
這個是基本的 str...(恕刪)


我自己連程式都寫了
debug也做了
只是這個小問題解不出來
一題數學題有時候會有最關鍵的"key"
才能解它
我承認是我當時書沒看清楚

但我絕對不承認你的說法是對的
"別老想得到速成的答案"

你只是以你一貫的說法對網路上
那些把中文問題打出跟別人
"要程式碼"

的人
而我是遇到想了很久的問題
真的解不出來才會來問
為什麼01每次有關程式的問題都會被人說"不要怎樣、那樣的..."
為什麼一堆簡單的電腦問題,像是關機後為什麼不能馬上開機?
為什麼重灌要灌區動程式之類的,沒人說你去把主機版說明書看一遍
沒人說,去爬文,都說硬碟馬達會壞,這樣顯卡音效卡電腦才看得懂是什麼裝置...
不要以為大家都是天才debug看書之後
都可以寫好程式,如果這樣那01很多人都要
丟飯碗了
union mydata
{
char name[15];
char number[7];;
}teacher;


上面已經點出來
共用同一塊記憶體

+-----------------------+--------------------------+
| | |
+-----------------------+--------------------------+
char[0--------------------------------------------15]
char[0-----------------7]

總共是宣告了15個BYTEs

覺得你應該問一下你老闆 它的意思是不是要用15個byte的空間去做這個作業
houcheng wrote:
這個是基本的 str...(恕刪)


那要這個論壇是來幹什麼的?
也許這個問題是比較基本的概念
但是國外教育的觀念就是
There is no stupid question
自學的能力是很重要的 尤其是電腦這東西

但是你的回答好像並不是有很大的實質幫助
大家和氣一點, 我是看到原PO的程式是自己寫的,

所以才跳出來說明一下,

程式是不是自己寫的, 其實是看的出來的,

不像有些人只丟問題或作業出來, 直接要人寫CODE給他,

原PO算是認真的, 現在通訊那麼方便, 問問人家, 肯答的就答,

不願賜教的就不回, 少一點火氣,

雖然不像我們以前學程式那麼辛苦, 跟本沒人問,

去問老師很多也答不出來...沒錯, 我遇過....

因為他自己也剛學, 教書是照本宣科.....

01 或許可以再開個版大家討論程式設計好了....

國外會進步是因為很多人願意分享.

有時上網找資料, 才知道有那麼多善心人士寫了很多好用的CODE/PROGRAM.

自己雖然不能成為那麼有能力的人,

幫幫人解解小問題, 那也是OK的....
union 在資料庫處理上還是很好用的
比如資料欄位可以有多種型態可以選擇
但是真正儲存時只會用其中一種
typedef union field {
char name[33];
int num;
struct addr_t addr;
...
};

通常結構上會搭配一個 type 項目來指定型態
用union 的作法會比較具有可讀性
不過很多情況下會直接做強制型態轉換,這要看各人喜好

另外早期 union 較常看到的是針對x86系統呼叫
因為 x86 的暫存器根據長度不同有不同的名稱
如 AH(AX high 8bits), AL (AX low 8bits), AX (EAX low 16bits), EAX (32).....
對這種儲存位置有相依關係的也需要用 union 處理,才會比較方便
這應該算是 union 的經典範例
卡歐斯 wrote:
如果說"STRUCT...(恕刪)


講到 class 的確是天跟地的差別

不過 union 並非只是單純考慮記憶體的消耗問題
有時候也是為了便利跟可讀性
也絕對不是很少用到
只是使用資料結構的類型跟時機會導致用法有很大的差別
有空可以 grep 一下編譯器的 include 目錄
應該有不少 union 的敘述
尤其是針對資料庫或者硬體驅動程式的
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!