实现Friend函数

Implementing Friend Functions

本文关键字:函数 Friend 实现      更新时间:2023-10-16

我有两个类HumidityTemperature。它们有友元函数,在它们的头文件中声明:

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

在哪里可以方便地实现功能(Temperature.cppHumidity.cppanother_file.cpp)?

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

此外,我强烈建议使用weather这样的名称空间来处理所有这些。

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

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(俗话说:"您不希望朋友触摸您的隐私"-只需为TemperatureHumidity提供适当的public接口即可)。