Re: [問題] 物件內的物件...彼此溝通的方法?
把地球一層一層傳進去是正常做法之一.
另外, 每一層都提供取得上一層, 也是正常做法
之一
(唯一不建議的是 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
06/25 14:16, 1F
→
06/25 16:38, , 2F
06/25 16:38, 2F
討論串 (同標題文章)
完整討論串 (本文為第 8 之 8 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章