我们都知道,面向对象编程具有封装、多态、继承的特性
先基于封装来看
以C++为例,对于有些数据成员、成员函数,我们为了隐私性,不得已将他设置为私有的数据,但是,如果我们想要去使用它们,就提供共有的方法去获取,这是一件既蛮烦又迫不得已的事情,那么有没有什么现成的方法可以排除掉这些“麻烦”呢?
(哈哈哈,既然俺都说了,那么就肯定是有的)
这就是我要提到的友元函数、友元类
先举个例子:
class MyClass
{
//C++的类默认是私有的
int val;
void fun()
{
cout << "我是私有成员函数fun" << endl;
}
};
int main()
{
//我们现在创建对象
MyClass myc;
myc.fun();
system("pause");
return 0;
}
很明显我们访问不到类里面的私有成员,这也体现了封装的特特征
我们先来做一些“很麻烦的操作”
类的内部:
//“很麻烦的操作”:
public:
int getData(int data)
{
this->val = data;
return val;
}
void test()
{
fun();
}
主函数里面是可以调用的、没有报错:
那么现在我创建的类有一个朋友就不一样了
假如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、不继承的(小明父亲的朋友并不是小明的朋友)
好了,先分享到这里,还有就是如果有错的,希望大佬可以指出来~