我有两个类Humidity
和Temperature
。他们有朋友的功能,那就是在他们的头文件中声明:实现好友功能
friend
void PrintWeather(const Temperature &cTemperature, const Humidity &cHumidity);
哪里是很方便的实现功能(Temperature.cpp
,Humidity.cpp
,或another_file.cpp
)?
我有两个类Humidity
和Temperature
。他们有朋友的功能,那就是在他们的头文件中声明:实现好友功能
friend
void PrintWeather(const Temperature &cTemperature, const Humidity &cHumidity);
哪里是很方便的实现功能(Temperature.cpp
,Humidity.cpp
,或another_file.cpp
)?
由于功能PrintWeather
不是逻辑上耦合 一个类比另一个更多,我会实现它在一个单独的文件,也许weather.cpp
。我用小写字母表示该文件不包含类Weather
,而是与天气相关的功能。
另外我的强烈建议是对所有这些使用名称空间,如weather
。
不知道你展示的更多,我会质疑你的设计。为什么PrintWeather
需要访问Temperature
和Humidity
的内部?它应该只使用这两者的公共接口。
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
(正如俗话所言:“你不想让你的朋友碰到你的私人” - 只需提供Temperature
和Humidity
与适当的public
接口)。
这只是朋友功能教程的一个例子。我一直对在这种情况下使用什么方法感兴趣。 –
或者将文件命名为'output_functions.cpp'。或者更好,创建一个WeatherForecast类,它包含一个'Temperature'和'Humidity'对象作为字段,它具有'Print'功能。 – CompuChip