实现好友功能

时间:2015-12-15 13:44:59

标签: c++ friend-function

我有两个班级HumidityTemperature。并且它们具有友元函数,它在头文件中声明:

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

实现函数(Temperature.cppHumidity.cppanother_file.cpp)在哪里方便?

2 个答案:

答案 0 :(得分:2)

由于函数PrintWeather没有逻辑耦合  对于一个类而不是另一个类,我会在一个单独的文件中实现它,可能是weather.cpp。我使用小写来表明该文件不包含类Weather,而是包含与天气相关的函数。

此外,我的强烈建议是为所有这些使用weather这样的命名空间。

如果不了解您展示的内容,我会质疑您的设计。为什么PrintWeather需要访问TemperatureHumidity的内部?它应该只使用这两者的公共接口。

答案 1 :(得分: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();

现在,如果您的作业要求,您可以授予Weather friend TemperatureHumidity的访问权限。但是,我想指出,在实际设计中,您希望尽可能避免friend(俗话说:“你不希望你的朋友碰到你的私人”< / em> - 只需向TemperatureHumidity提供相应的public界面。