C++友元

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

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

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

友元没有共有私有类别,本身就是一个类别

友元的特点:

1.不具有对称性: A是B的友元,并不意味着B是A的友元。

2.不具有传递性: A是B的友元,B是C的友元, 但A不是C的友元。

3.不具有继承性: Base 类型继承Object类型,如果Object 类型是A的友元,但Base类型不是A友元。

外部函数友元

class Int
{
    int value;
pub1ic:
Int(int x = 0):value(x)
{
	cout<<"Create Int: "<<this<<end1;
}
~Int()
{ 
    cout<<"Destroy Int:'<<this<<end1 ;
}
friend void Print(const Int &it); //注册为类的友元函数
};
void Print(const Int &it)
{
	cout<<it. value<<end1 ; 
}
int main()
{
    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: "<<this<<end1;}
	~Int()
    { cout<<"Destroy Int:"<<this<<end1;}
};
class object
{
    public:
void Print(const Int &it)
{
    cout<<it.value<<end1 ;
}
};
int main()
{
    Int a(10) ;
	object obj ;
	obj.Print(a) ;
	return 0;
}

1.友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符".”加对象成员名。但友元函数可以访问类中的所有成

员,一般函数只能访问类中的公有成员。

2.友元函数不受类中的访问权限关键字限制,可以把它放在类的公有、私有、保护部分,但结果一样。

3.某类的友元函数的作用域并非该类作用域。如果该友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则与一般函数相同。

类友元

class Object;
class Base
{
private:
	int sum;
public:
	Base(int x = 0) :sum(x) {}
	void fun(Object& x);
};
class Object
{
private:
	int value;
public:
	Object(int x) :value(x) {}
	friend class Base;
};


void Base::fun(Object& obj)
{
	obj.value = obj.value + sum;
}
int main()
{
	Base base(10);
	Object obja(20);
	base.fun(obja);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小新 蜡笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值