【类的朋友】有几个呢?

我们都知道,面向对象编程具有封装多态继承的特性

先基于封装来看

以C++为例,对于有些数据成员、成员函数,我们为了隐私性,不得已将他设置为私有的数据,但是,如果我们想要去使用它们,就提供共有的方法去获取,这是一件既蛮烦又迫不得已的事情,那么有没有什么现成的方法可以排除掉这些“麻烦”呢?

(哈哈哈,既然俺都说了,那么就肯定是有的)

这就是我要提到的友元函数、友元类

先举个例子:

class MyClass
{
	//C++的类默认是私有的
	int val;
	void fun()
	{
		cout << "我是私有成员函数fun" << endl;
	}
};

int main()
{
	//我们现在创建对象
	MyClass myc;
	myc.fun();


	system("pause");
	return 0;
}

【类的朋友】有几个呢?_第1张图片

很明显我们访问不到类里面的私有成员,这也体现了封装的特特征

我们先来做一些“很麻烦的操作”

类的内部:

	//“很麻烦的操作”:
public:
	int getData(int data)
	{
		this->val = data;
		return val;
	}
	void test()
	{
		fun();
	}

主函数里面是可以调用的、没有报错:

【类的朋友】有几个呢?_第2张图片

那么现在我创建的有一个朋友就不一样了

假如B类想要从A类里面要数据,那么就要先在类A里面加上好朋友类B

class MyClass
{
	//C++的类默认是私有的
	int val;
	void fun()
	{
		cout << "我是私有成员函数fun" << endl;
	}
public:
	friend class friend_class;        //友元类的声明
	friend void fun2(MyClass& mc);    //友元函数的声明

};
class friend_class
{
	void fun1(MyClass& mc)
	{
		mc.fun();
		mc.val;
	}
};

void fun2(MyClass& mc)
{
	mc.fun();
	mc.val;
}

是不是很神奇! 

另外,友元的特征是:

1、单向的(就比如说,你喜欢的对象不喜欢你[狗头])

2、不传递的(你认识你的朋友,你的朋友还认识他的朋友,但是你并不认识你朋友的朋友)

3、不继承的(小明父亲的朋友并不是小明的朋友)

好了,先分享到这里,还有就是如果有错的,希望大佬可以指出来~

你可能感兴趣的:(c++,开发语言)