“再探构造函数”(2)

一. 友元

何时会用到友元呢?

当想让(类外面的某个函数/其它的类)访问 某个类里面的(私有或保护的)内容时,可以选择使用友元。

友元提供了一种突破(类访问限定符 封装)的方式,即在类外面也可以访问类里面的私有/保护成员。

友元的关键字:friend

友元的声明通常位于类的声明中,但其实现则位于类外部。

  • 友元分为2种:友元函数和友元类
    在这里插入图片描述

友元函数是一种特殊的函数,且它的声明是在类的内部,但它并不是类的成员函数

还有一个注意点是,只有类的静态成员(静态成员变量/静态成员函数)才能直接用类名去访问。
-------------首先
静态成员属于整个类,所有对象共用一份;非静态成员(普通成员)属于具体的对象,每个对象都有自己独立的一份。
-------------原因
只有被 static 修饰的 静态成员(变量/函数),才能直接用「类名::」去访问(A::_a1);普通成员,绝对不能用类名访问,必须通过对象访问(对象.成员)。

在这里插入图片描述

class A
{
   
   
public:
	A(int a1)
		:_a1(3)
	{
   
   
	}
	int _a1=1;
};
int main()
{
   
   
   
	std::cout << A::_a1 << std::endl;
	//这个是错误的,_a1只是普通成员,不可以用类名访问
   
	A aa1(9);
	std::cout << aa1._a1 << std::endl;
	//这个是正确的
}

在这里插入图片描述

class A
{
   
   
public:
	A(int a2)
	{
   
   
	}
	static int _a1;
	int _a2 = 9;
};

static int _a1 = 8;//static成员在全局初始化

int main()
{
   
   
	//静态成员函数可以用类名去访问
	std::cout << A::_a1 << std::endl;
}

"全局函数"作友元

(某个全局函数) 想要访问 (类A里的私有成员),直接访问的话,编译器会报错。


办法:我们可以告诉编译器,这个全局函数是类A的好朋友,它是可以访问类A的私有成员的,可以放心,不会出事儿。


措施:在类的内部声明,全局函数是友元


//类A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值