我有两个班级Humidity
和Temperature
。并且它们具有友元函数,它在头文件中声明:
friend
void PrintWeather(const Temperature &cTemperature, const Humidity &cHumidity);
实现函数(Temperature.cpp
,Humidity.cpp
或another_file.cpp
)在哪里方便?
答案 0 :(得分:2)
由于函数PrintWeather
没有逻辑耦合
对于一个类而不是另一个类,我会在一个单独的文件中实现它,可能是weather.cpp
。我使用小写来表明该文件不包含类Weather
,而是包含与天气相关的函数。
此外,我的强烈建议是为所有这些使用weather
这样的命名空间。
如果不了解您展示的内容,我会质疑您的设计。为什么PrintWeather
需要访问Temperature
和Humidity
的内部?它应该只使用这两者的公共接口。
答案 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
Temperature
和Humidity
的访问权限。但是,我想指出,在实际设计中,您希望尽可能避免friend
(俗话说:“你不希望你的朋友碰到你的私人”< / em> - 只需向Temperature
和Humidity
提供相应的public
界面。