Re: [問題] 物件內的物件...彼此溝通的方法?

看板C_and_CPP (C/C++)作者 (Alien)時間16年前 (2009/06/25 12:37), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串8/8 (看更多)
把地球一層一層傳進去是正常做法之一. 另外, 每一層都提供取得上一層, 也是正常做法 之一 (唯一不建議的是 global/singleton) "取得上一層" 的做法要怎麼做, 也要視乎你的設計而定. 要是你的設計, Planet, Country, City 都是很 concrete 的 class, 那麼一般都會這樣寫: class Planet { private: vector<Country> countries; } class Country { private: Planet& planet; vector<City> cities; } class City { private: Country& country; vector<People> peoples; } class People { private: City& city; } 在 People 要存取 planet, 當然是寫 getCity().getCountry().getPlanet().getTemperature() 了 但一般這類層次性的關係, 比較少會特別拿 Planet 的獨有 method. 這類情況, 會用類似 Composite 的設計: 有一 abstract class 是 Region, 裡面有 parent Region 的 ref (也可以有 enclosing Regions), 也有 getTemperature() abstract class Region { private: Region* parentRegion; vector<Region> enclosingRegions; int getTemperature() { if (myTemperature != null) { return myTemperature; } else if (parentRegion == null) { // I am the top return 0; } else { return parentRegion->getTemperature(); } } } Planet, Country, District 可以是 Region 的 concrete class, 或者是某種 concrete class 的 instance. People 可以位處任何 Region. 通常這類情況, 也只會 concern 我 身處的 region 的氣溫. 很少會需要取得最高層的氣溫 (就算有, 也 可以弄一個 getPlanetTemperature(), 類似上面的 getTemperature, 只是自己不是 planet 的話就問上層, 直到是 planet 的一層就回報自 己氣溫. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82

06/25 14:16, , 1F
想成 tree 就不會太複雜了
06/25 14:16, 1F

06/25 16:38, , 2F
所謂 tree 就是我所謂 composite-like 的做法了
06/25 16:38, 2F
文章代碼(AID): #1AGlxxzB (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AGlxxzB (C_and_CPP)