2015-12-15 61 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接口)。