栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++友元(friend)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++友元(friend)

友元
友元 friend 机制允许一个类授权其他的函数访问它的非公有成员.

友元声明以关键字 friend 开头 ,它只能出现在类的声明中, 它们不受其在类体中的 public private 和
protected 区的影响.

友元分为外部函数友元, 成员函数友元,类友元。

特点

不具有对称性:A 是 B 的友元, 并不意味着 B 是A的友元
不具有传递性:A是B的友元, B是C的友元, 但A不是C的友元。
不具有继承性: Base 类型继承 Object类型, 如果Object 类型是A的友元,但Base类型不是A友
元。

外部函数友元:

示例
需要在类中进行对其进行声明,则可以访问类的所有成员

class Int
{
int value;
public:
Int(int x = 0):value(x)
{
cout<<"Create Int: "< cout<<"Destroy Int: "<
cout<
Int a(10);
Print(a);
return 0;
}

成员函数友元
将一个成员函数声明成友元的时,必须要指明该成员函数属于哪个类:

class Object; // 类的声明
class Int
{
friend void Object::Print(const Int &it); // 注册为成员函数友元
private:
int value;
public:
Int(int x = 0):value(x){ cout<<"Create Int: "< cout<<"Destroy Int: "<
public:
void Print(const Int &it)
{
cout<
Int a(10);
Object obj;
obj.Print(a);
return 0;
}

总结:
1.友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.”加对象成员
名。但友元函数可以访问类中的所有成员,一般函数只能访问类中的公有成员。
2.友元函数不受类中的访问权限关键字限制,可以把它放在类的公有、私有、保护部分,但结果一
样。
3.某类的友元函数的作用域并非该类作用域。如果该友元函数是另一类的成员函数,则其作用域为
另一类的作用域,否则与一般函数相同。
类友元

整个类可以是另一个类的友元。友元类的每个成员函数都是另一个类的友元函数,都可访问另一个
类中的所以成员,共有,保护或私有数据成员

class Object; // 类的声明
class Int
{
friend class Object; // 注册为类友元
private:
int value;
public:
Int(int x = 0):value(x){ cout<<"Create Int: "< cout<<"Destroy Int: "<
public:
void Print(const Int &it)
{
cout<
Int a(10);
Object obj;
obj.Print(a);
return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994069.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号