私有数据成员不能被类外的其他函数读取,但是有时候类会允许一些特殊的函数直接读写其私有数据成员。
关键字friend可以让特定的函数或者别的类的所有成员函数对私有数据成员进行读写。这既可以维护数据的私有性,有可以保证让特定的类或函数能够直接访问私有数据。
一个类可以声明另一个类为其友元,这个友元的所有成员函数都可以读写它的私有数据。
CustomDate(int d=0,int y=0) { da=d; yr=y; }
void display() const {cout< friend Date; //这儿
Date(int m,int d,int y) { mo=m; da=d; yr=y; }
Date::operator CustomDate()
static int dys[] = {31,28,31,30,31,30,31,31,30,31,30,31};
for (int i=0;i cd.da+=da;
cd.display();
在上面的程序中,有这样一句 friend Date; 该语句告诉编译器,Date类的所有成员函数有权访问CustomDate类的私有成员。因为Date类的转换函数需要知道CustomDate类的每个数据成员,所以真个Date类都被声明为CustomDate类的友元。