实现Friend函数
Implementing Friend Functions
我有两个类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
接口即可)。
相关文章:
- 如何调用用于重载运算符"<<"的 friend 函数?
- 在使用另一个类"friend"函数时无法发现错误C++
- C++ 如何将关键字"friend"与两个类的成员函数一起使用 相互包含
- 模板类和Friend模板函数
- 在运算符重载中使用带有 const 引用的 friend 函数
- 运算符重载(使用binaray friend函数)类没有成员,并且成员不可访问
- 类的 friend 函数无法访问其私有向量;
- friend get 函数,返回通过可变参数模板递归计算的类型
- 如何在 c++ 中使用常见的 Friend 函数
- 在Ostream Overload Friend函数中使用向量
- friend函数是如何在内部实现的
- Friend函数和未定义的私有方法
- c++ 派生基类 Friend 函数访问父级上的私有函数
- 前向声明的问题-Friend函数和行/点类
- 为什么friend函数不能访问类的私有成员
- 使用friend函数,我们可以覆盖类的私有成员吗
- Friend函数访问静态库中定义的类的私有成员
- 实现Friend函数
- Friend函数和命名空间.无法访问类中的私有成员
- 声明受保护的函数friend