我有兩個類Humidity
和Temperature
。他們有朋友的功能,那就是在他們的頭文件中聲明:實現好友功能
friend
void PrintWeather(const Temperature &cTemperature, const Humidity &cHumidity);
哪裏是很方便的實現功能(Temperature.cpp
,Humidity.cpp
,或another_file.cpp
)?
我有兩個類Humidity
和Temperature
。他們有朋友的功能,那就是在他們的頭文件中聲明:實現好友功能
friend
void PrintWeather(const Temperature &cTemperature, const Humidity &cHumidity);
哪裏是很方便的實現功能(Temperature.cpp
,Humidity.cpp
,或another_file.cpp
)?
由於功能PrintWeather
不是邏輯上耦合 一個類比另一個更多,我會實現它在一個單獨的文件,也許weather.cpp
。我用小寫字母表示該文件不包含類Weather
,而是與天氣相關的功能。
另外我的強烈建議是對所有這些使用名稱空間,如weather
。
不知道你展示的更多,我會質疑你的設計。爲什麼PrintWeather
需要訪問Temperature
和Humidity
的內部?它應該只使用這兩者的公共接口。
PrintWeather
函數的名稱意味着它談論的東西叫Weather
。因此,也許你應該讓Weather
(或WeatherForecast
)到一個單獨的類,它收集天氣的所有組件:
class Weather
{
private:
Temperature temperature;
Humidity humidity;
public:
void Print();
// or: void Print(std::ostream& out) const;
}
注意如何函數的名稱,現在僅僅是Print
- 它打印什麼是從它的生活和在替代尷尬
weatherForecast.PrintWeather();
你的類已經明確寫
weatherForecast.Print();
如果您的任務需要您這樣做,現在您可以授予Weather
friend
對Temperature
和Humidity
的訪問權限。不過,我想指出的是,在實際設計中,您希望儘可能避免friend
(正如俗話所言:「你不想讓你的朋友碰到你的私人」 - 只需提供Temperature
和Humidity
與適當的public
接口)。
這只是朋友功能教程的一個例子。我一直對在這種情況下使用什麼方法感興趣。 –
或者將文件命名爲'output_functions.cpp'。或者更好,創建一個WeatherForecast類,它包含一個'Temperature'和'Humidity'對象作爲字段,它具有'Print'功能。 – CompuChip