我看到一些 C++ 代码,对此有疑问:
class CRectangle {
int width, height;
public:
friend CRectangle duplicate (CRectangle);
};
变量width
和height
是私有(private)的,方法duplicate()
是公共(public)的。关键字 friend
用于访问 CRectangle
对象之外的私有(private)和 protected 函数,但 duplicate()
已经是公开的。如果可以从外部访问,为什么我们需要“ friend ”?
这是否意味着,虽然我们在类外直接调用了一个公共(public)方法,如duplicate()
,但是如果该方法访问了一些私有(private)变量,也是不允许的,我们必须声明它作为“ friend ?”
这是duplicate()
函数的实现;我只是想把问题说清楚:
CRectangle duplicate (CRectangle rectparam)
{
CRectangle rectres;
rectres.width = rectparam.width*2;
rectres.height = rectparam.height*2;
return (rectres);
}
最佳答案
如果你删除friend
,这个函数将变成一个方法——一个函数
,它在类内部声明并且是一个公共(public)方法
(因为有 public:
)
如果你把 friend
放在 duplicate
前面,这意味着你声明一个函数,它不是类的成员,它采用一个参数 - CRectangle
并且可以访问类的 private
/protected
成员。
第二种情况需要定义CRectangle duplicate( CRectangle )
两种情况不同。
编辑:
对于 friend
,访问说明符无关紧要。
“第二种情况需要为 CRectangle duplicate( CRectangle )
定义”,我的意思是,第一种情况也需要定义,但它是
// vvvvvvvvvvvv
CRectangle CRectangle::duplicate( CRectangle )
关于c++ - C++中的公共(public) friend 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5903307/