[問題] 關於繼承

看板C_and_CPP (C/C++)作者 (典型魔羯座)時間14年前 (2012/04/18 00:19), 編輯推噓4(4017)
留言21則, 6人參與, 最新討論串2/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 小弟最近在寫圖學的程式,有一些關於物體模型設計概念的問題想請教。 因為我會碰到很多種不同的形體(EX: 球體、平面...etc),每種形體包含的 資訊都不太一樣(EX:球:圓心和半徑;平面:兩條基底向量),因此在程式之中, 常常必須丟進一個形體,根據他的類型不同而拿取不同的資訊。 我一開始想法很簡單,就是讓所有的形體都繼承myObject這個class, myObject只有type(形狀)這個成員,然後就可以用myObject的型態傳遞。根據 type判斷屬於何種子類別,再向下轉換成該類別。 但因為C++的向下轉換問題實在很多,網友也多不推薦這種方式。 不知道在以上的需求之下,有沒有其他更精準的設計概念呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.184.113

04/18 00:20, , 1F
head first object-oriented analysis and design
04/18 00:20, 1F

04/18 00:20, , 2F
看完你會受益良多
04/18 00:20, 2F

04/18 00:27, , 3F
如果你從 type 做類別判斷這件事是可靠的話,那直接向下
04/18 00:27, 3F

04/18 00:27, , 4F
轉型會有問題嗎?
04/18 00:27, 4F

04/18 00:47, , 5F
如果以要向下轉型,這樣不就放棄掉用virtual了
04/18 00:47, 5F

04/18 00:53, , 6F
總覺得原PO需要的是多型的觀念?
04/18 00:53, 6F

04/18 00:54, , 7F
factory pattern
04/18 00:54, 7F

04/18 00:55, , 8F
另外不是每個現實世界的模型都可以套到 OO
04/18 00:55, 8F

04/18 00:56, , 9F
比方說雖然正方形是矩形的特例,但它們並不適合繼承
04/18 00:56, 9F

04/18 01:11, , 10F
我懷疑他說的拿取資訊,是 p梯形->上底; 而非 p->info();
04/18 01:11, 10F

04/18 01:12, , 11F
所以才說直接向下轉型成 ptr梯形,如果要用多型,再把指標
04/18 01:12, 11F

04/18 01:13, , 12F
轉回 base * 就又可以用了,不必放棄
04/18 01:13, 12F

04/18 01:23, , 13F
回樓上 向下轉換之後使用子類別函式有時會有暴力讀取的問題
04/18 01:23, 13F

04/18 01:25, , 14F
暴力讀取的意思是?
04/18 01:25, 14F

04/18 01:25, , 15F
感謝回覆 會再試試看多型的概念!
04/18 01:25, 15F

04/18 01:26, , 16F
access violation reading錯誤 發生在完全不相干的地方
04/18 01:26, 16F

04/18 01:31, , 17F
應該是指標指向的物件根本不是對應的子類別,才可能發生吧
04/18 01:31, 17F

04/18 01:31, , 18F
似乎是因為當我new出子類別丟給父類別時 只有父類別具有的
04/18 01:31, 18F

04/18 01:33, , 19F
成員才會被複製過去?
04/18 01:33, 19F

04/18 02:38, , 20F
個人認為會需要用到向下轉型的情況就代表該父類別的抽象
04/18 02:38, 20F

04/18 02:39, , 21F
化是失敗(或不足)的
04/18 02:39, 21F
文章代碼(AID): #1FZPW2vz (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FZPW2vz (C_and_CPP)