在封装中C++类数据成员大多情况是private属性;但是如果接口采用多参数实现肯定影响程序效率;然而这时候如果外界需要频繁访问这些私有成员,就不得不需要一个既安全又理想的“后门”——友元关系;
C++中提供三种友元关系的实现方式,友元函数、友元成员函数、友元类。
友元函数:既将一个普通的函数在一个类中说明为一个friend属性;其定义(大多数会访问该类的成员)应在类后;
友元成员函数:既然是成员函数,那么肯定这个函数属于某个类,对了就是因为这个函数是另外一个类的成员函数,有时候因为我们想用一个类通过一个接口去访问另外一个类的信息,然而这个信息只能是被它授权的类才能访问;那么也需要用friend去实现;这个概念只是在声明的时候稍有变化;
友元类:友元类声明会将整个类说明成为另一个类的友元关系;和之前两种的区别是集体和个人的区别;友元类的所有成员函数都可以是另一个类的友元函数;
值得注意的是友元关系是单向的,有点像我们恋爱中出现的单相思 O(∩_∩)O,单向关系就是说如果A被说明成B的友元关系,那么只能说A是B的友元,并不代表B是A的友元;其次在多数情况下友元关系的函数都会访问它被说明中类的成员,这时候应该将函数定义在类的后面;
下面给一个简单的例程代码;
using namespace std;
class B;
class A{
private:
int x;
public:
A();
void display(B &);
};
class C;
class B{
private:
int y;
int z;
public:
B();
B(int, int);
friend void A::display(B &);//友元成员函数
friend void display(B &);//友元函数
friend class C;//友元类
};
class C{
private:
int sum;
void calc(B &);
public:
C();
void display(B &);
};
//必须在友元关系的类后进行定义
void display(B &v)//友元函数
{
cout << v.y << " " << v.z << endl;
}
A::A()
{
this->x = 0;
}
void A::display(B &v)//友元成员函数
{
this->x = v.y + v.z;
cout << this->x << endl;
}
B::B()
{
this->y = 0;
this->z = 0;
}
B::B(int y, int z)
{
this->y = y;
this->z = z;
}
C::C()
{
sum = 0;
}
void C::display(B &v)
{
this->calc(v);
cout << sum << " = " << v.y << " + " << v.z << endl;
}
void C::calc(B &v)
{
sum = v.y + v.z;
}
int main()
{
A a;
B b(2, 3);
display(b);
a.display(b);
C c;
c.display(b);
return 0;
}
分享到:
相关推荐
全面讲解C++友元知识,更加详细的讲述C++中友元机制,还配有代码讲解,十分详细!
本文档详细介绍了C++友元函数及友元类,方便大家对比学习
关于c+模板之友元类友元函数的实例化,图形界面之矩形。
实例讲解C++友元,利用实例讲解C++友元的知识
C++友元习题.pdf
主要讲解c++种的友元类友元函数 可以更好地学习其中的内容 友元在类中担任着十分关键的角色 所以更应该认真学习
各种友元应用举例。欢迎大家下载使用。 各种友元应用举例。欢迎大家下载使用。
C++友元函数的使用,这个友元函数是另一个类的成员函数
让你很好的理解C++友元接口问题。加油,让我们一起冲刺C++。
用vc++友元类程序的编写。程序用vc++6.0开发,其中关于年月份的判断相对前面,程序简单易懂。
生活中你的家有客厅(public),有你的卧室...**友元的目的** 就是让一个函数或者类 访问另一个类中的私有成员 **友元的关键字为** ==friend== **友元的三种实现** * 全局函数做友元 * 类做友元 * 成员函数做友元
如何声明和创建友元类 简单友元类的声明,C++中友元类的应用范围
简单的友元类使用,自己编的c++程序,可以作为模板。
一个实例,实现运算符重载(成员函数和非成员函数两种方式),友元函数的使用,注意事项等,自己学习时编写的,
① 在头文件中声明类,在源文件中定义类的成员函数,采用构造函数进行对象的初始化; ② 首先,采用友元函数distance()的方式实现友元接口;其次,采用友元成员distance()的方式实现友元接口;最后,尝试采用友元类...
介绍c++ 友元函数的定义使用,初步入门教程
这是关于C++中、如何将普通函数声明友元函数的、求间隔日期的例子。适用于C++初学者学习用。
.
.
。