实现友元函数
Implementing Friend Functions
我有两个 类 Humidity
和 Temperature
。他们有朋友功能,在他们的头文件中声明:
friend
void PrintWeather(const Temperature &cTemperature, const Humidity &cHumidity);
哪里方便实现功能(Temperature.cpp
、Humidity.cpp
或another_file.cpp
)?
因为函数 PrintWeather
没有逻辑耦合
对于一个 class 比另一个多,我会在一个单独的文件中实现它,也许 weather.cpp
。我使用小写来表明该文件不包含 class Weather
,而是与天气相关的函数。
此外,我强烈建议对所有这些使用像 weather
这样的命名空间。
在不了解您展示的更多信息的情况下,我会质疑您的设计。为什么 PrintWeather
需要访问 Temperature
和 Humidity
的内部结构?它应该只使用这两个的 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
访问 Temperature
和 Humidity
的权限,如果您的任务需要这样做的话。但是,我想指出的是,在实际设计中,您希望尽可能避免 friend
s(俗话说:"you don't want your friends to touch your privates" - 只是为 Temperature
和 Humidity
提供适当的 public
接口。
我有两个 类 Humidity
和 Temperature
。他们有朋友功能,在他们的头文件中声明:
friend
void PrintWeather(const Temperature &cTemperature, const Humidity &cHumidity);
哪里方便实现功能(Temperature.cpp
、Humidity.cpp
或another_file.cpp
)?
因为函数 PrintWeather
没有逻辑耦合
对于一个 class 比另一个多,我会在一个单独的文件中实现它,也许 weather.cpp
。我使用小写来表明该文件不包含 class Weather
,而是与天气相关的函数。
此外,我强烈建议对所有这些使用像 weather
这样的命名空间。
在不了解您展示的更多信息的情况下,我会质疑您的设计。为什么 PrintWeather
需要访问 Temperature
和 Humidity
的内部结构?它应该只使用这两个的 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
访问 Temperature
和 Humidity
的权限,如果您的任务需要这样做的话。但是,我想指出的是,在实际设计中,您希望尽可能避免 friend
s(俗话说:"you don't want your friends to touch your privates" - 只是为 Temperature
和 Humidity
提供适当的 public
接口。