“再探构造函数”(2)

文章目录

  • 一. 友元
    • ‘全局函数’作友元
    • ‘成员函数’作友元
    • ‘类‘作友元
  • 二. 内部类
  • 三. 匿名对象
  • 四. 对象拷贝时的编译器优化
  • 分析调用时的顺序

一. 友元

何时会用到友元呢?

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

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

友元的关键字:friend

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

  • 友元分为2种:友元函数和友元类
    “再探构造函数”(2)_第1张图片

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

还有一个注意点是,只有类的静态成员或者静态成员函数才能直接用类名去访问。

“再探构造函数”(2)_第2张图片

class A
{
   
public:
	A(int a1)
		:_a1(3)
	{
   
	}
	int _a1=1;
};
int main()
{
   
    //这个是错误的
	std::cout << A::_a1 << std::endl;
	
   //这个是正确的
	A aa1(9);
	std::cout << aa1._a1 << std::endl;
}

“再探构造函数”(2)_第3张图片

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
class A
{
   
	friend void quanjv

你可能感兴趣的:(C++,c++,经验分享)