本文是学习慕课网C++远征之模板类.
友元函数分为友元全局函数和友元成员函数:
友元全局函数:将函数定义在全局,并在类中声明为友元
友元成员函数:将函数定义在类当中,并把函数声明为另外一个类的友元函数
两个都可以直接访问类的私有成员
(1)友元全局函数
先来看一段代码
#include <iostream>
using namespace std;
class Coordinate //定义一个类:坐标
{
friend void printXY(Coordinate &c); //友元函数,参数提倡引用或指针的方法
public:
Coordinate(int x,int y); //构造函数
private:
int m_iX; //x坐标
int m_iY; //y坐标
};
void printXY(Coordinate &c)//友元函数定义不需要加类名
{
cout<<c.m_iX<<' '<<c.m_iY;//直接访问类的私有成员
}
Coordinate::Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
int main(void)
{
Coordinate coor(3,5);
printXY(coor);
return 0;
}
(2)友元成员函数
#include <iostream>
using namespace std;
class Coordinate;
class Circle
{
public:
void printXY(Coordinate &c);
};
//定义一个类:坐标
class Coordinate
{
friend void Circle::printXY(Coordinate &c);//友元函数为另一个类的成员函数
//友元函数,Cricle类的成员函数
public:
Coordinate(int x,int y); //构造函数
private:
int m_iX; //x坐标
int m_iY; //y坐标
};
int main(void)
{
Coordinate coor(3,5);
Circle circle;
circle.printXY(coor);
return 0;
}
void Circle::printXY(Coordinate &c)
{
cout<<c.m_iX<<' '<<c.m_iY;
}
Coordinate::Coordinate(int x,int y)
{
m_iX=x;
m_iY=y;
}
好了,这里是简单了解了定义,下次我会更详细地学习友元函数的编码实现。