友元函数 友元类 及用法

友元函数可以修改访问类内部的私有成员,

友元函数的参数之一是类元素,类指针或者是类引用,意思是修改某个对象中的类私有成员(对象一般是访问不了类私有成员的).

若F类是A类的友元类,那么F类的所有成员函数都是A类的友元函数,在F类里声明一个A类的对象a,在F类内部,这个对象a可以直接访问A类的私有成员.

友员类通常设计为一种对数据操作或类之间传递消息的辅助类

#include "iostream"
using namespace std;

class A1
{
public:
	A1()
	{
		a1 = 100;
		a2 = 200;
	}
	int getA1()
	{
		return this->a1;
	}
	//声明一个友元函数
	friend void setA1(A1 *p, int a1); //什么这个函数是这个类的好朋友
	
protected:
private:
	int a1;
	int a2;
};

void setA1(A1 *p, int a1)
{
	p->a1 = a1;
}
//friend 破坏了类的封装性。。。。
//friend关键字是一个关系户
//why 无奈之际 java class
//java---》1.class==》class==>java类
//java类的反射 sun jdk api

//cc++ 1预编译gcc -E 2汇编 gcc -i 3编译gcc -c 3、链接ld ===》汇编代码
//friend 
//应用场景。。。。。
//const关键字 冒牌货c
//register
//typedef 混号王 

void main11()
{
	A1 mya1;
	cout<<mya1.getA1()<<endl;
	setA1(&mya1, 300);
	cout<<mya1.getA1()<<endl;

	system("pause");
}

class A
{
	//b是a的好朋友	
	friend class B;
public:
	void display()
	{
		cout<<x<<endl;
	}

protected:
private:
	int x;
};

class B
{
public:
	void setA(int x)
	{
		Aobj.x = x;
	}
	void printA()
	{
		cout<<Aobj.x<<endl;
	}
protected:
private:
	A Aobj;

};

void main()
{
	B b1;
	b1.setA(100);
	b1.printA();
	system("pause");
}

  

原文地址:https://www.cnblogs.com/c-slmax/p/5183930.html