C++友元
作者:互联网
目录
类的友元
可以把某些选定的函数看作类的“荣誉函数”,允许它们访问类对象中非公共的成员,就好像它们是类的成员一样,这种函数称为类的友元。友元可以访问类对象的任意成员。
可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。
友元函数
友元函数是一种定义在类外部的普通函数,但它需要在类体内进行说明。
为了与该类的成员函数加以区别,定义的方式是在类中用关键字friend说明该函数,格式如下:
friend 类型 友元函数名(参数表);
友元函数可以访问其他类中的私有成员,有助于数据共享,提高程序效率,但它又是对封装性的一个破坏,所以程序中不能大量使用友元
实例
#include<iostream>
#include <math.h>
using namespace std;
class Coordinate
{
public:
Coordinate(int x=0, int y=0){m_iX = x;m_iY = y;}
friend void printXY(Coordinate &c);
private:
int m_iX;
int m_iY;
};
void printXY(Coordinate &c)
{
cout<<c.m_iX<<c.m_iY;
}
int main(void)
{
Coordinate coor(3,5);
printXY(coor); //调用全局友元函数
//coor.printXY(coor); //错误
return 0;
}
执行结果:
35
友元函数的注意事项
①友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.
”加对象成员名。但友元函数可以访问类中的所有成员(公有的、私有的、保护的),一般函数只能访问类中的公有成员。
②友元函数不受类中的访问权限关键字限制,可以把它放在类的公有、私有、保护部分,但结果一样。
③某类的友元函数的作用域并非该类作用域。如果该友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则与一般函数相同。
④友元函数破坏了面向对象程序设计类的封装性,所以友元函数如不是必须使用,则尽可能少用。或者用其他手段保证封装性。
友元类
如果某类B的成员函数会频繁的存取另一个类A的数据成员, 而A的数据成员的Private/Protectd限制造成B存取的麻烦, B只能通过Public的成员函数进行间接存取。
把B做成A类的友元类,即A类向B类开放其Private/Protectd内容, 让B直接存取。
友元类:一个类可以作另一个类的友元。
友元类的所有成员函数都是另一个类的友元函数。
友元类的定义:
friend class 类名;
实例
#include <iostream>
using namespace std;
class CRect;
class CTest
{
public:
int Area(CRect &rect);
};
class CRect
{
public:
CRect();
CRect(int len,int wid);
friend class CTest;
private:
int m_len;
int m_wid;
};
int CTest::Area(CRect &rect)
{
return rect.m_len*rect.m_wid;
}
CRect::CRect()
{
m_len=m_wid=5;
}
CRect::CRect(int len,int wid)
{
m_len=len;
m_wid=wid;
}
int main()
{
int count;
CRect aRect(6,8);
CTest aTest;
count = aTest.Area(aRect);
cout<<"count = "<<count<<endl;
return 0;
}
执行结果:
count = 48
标签:友元,函数,int,成员,CRect,C++,len 来源: https://blog.csdn.net/qq_46485161/article/details/115431645