2015-12-15 73 views
1

我有兩個類HumidityTemperature。他們有朋友的功能,那就是在他們的頭文件中聲明:實現好友功能

friend 
void PrintWeather(const Temperature &cTemperature, const Humidity &cHumidity); 

哪裏是很方便的實現功能(Temperature.cppHumidity.cpp,或another_file.cpp)?

回答

2

由於功能PrintWeather不是邏輯上耦合 一個類比另一個更多,我會實現它在一個單獨的文件,也許weather.cpp。我用小寫字母表示該文件不包含類Weather,而是與天氣相關的功能。

另外我的強烈建議是對所有這些使用名稱空間,如weather

不知道你展示的更多,我會質疑你的設計。爲什麼PrintWeather需要訪問TemperatureHumidity的內部?它應該只使用這兩者的公共接口。

+0

這只是朋友功能教程的一個例子。我一直對在這種情況下使用什麼方法感興趣。 –

+0

或者將文件命名爲'output_functions.cpp'。或者更好,創建一個WeatherForecast類,它包含一個'Temperature'和'Humidity'對象作爲字段,它具有'Print'功能。 – CompuChip

1

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(); 

如果您的任務需要您這樣做,現在您可以授予WeatherfriendTemperatureHumidity的訪問權限。不過,我想指出的是,在實際設計中,您希望儘可能避免friend(正如俗話所言:「你不想讓你的朋友碰到你的私人」 - 只需提供TemperatureHumidity與適當的public接口)。