实现友元函数

Implementing Friend Functions

我有两个 类 HumidityTemperature。他们有朋友功能,在他们的头文件中声明:

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

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

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

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

在不了解您展示的更多信息的情况下,我会质疑您的设计。为什么 PrintWeather 需要访问 TemperatureHumidity 的内部结构?它应该只使用这两个的 public 接口。

PrintWeather 函数的名称暗示它谈论的是一个叫做 Weather 的东西。所以也许你应该把Weather(或WeatherForecast)变成一个单独的class,它收集了天气的所有组成部分:

class Weather
{
  private: 
    Temperature temperature;
    Humidity humidity;

  public:
    void Print();
    // or: void Print(std::ostream& out) const;
}

请注意函数的名称现在可以简单地是 Print - 它打印的内容 从它所在的 class 中已经很清楚了,而是尴尬的

weatherForecast.PrintWeather();

你可以写

weatherForecast.Print();

现在您可以授予 Weather friend 访问 TemperatureHumidity 的权限,如果您的任务需要这样做的话。但是,我想指出的是,在实际设计中,您希望尽可能避免 friends(俗话说:"you don't want your friends to touch your privates" - 只是为 TemperatureHumidity 提供适当的 public 接口。