链接:https://pan.baidu.com/s/1YRXI0WiABUlYaQXQDNfbyA?pwd=1688
提取码:1688
上午:类和对象高级应用(续)
下午:派生和继承
教学内容:
1、友元
类的私有成员只能在类定义的范围内使用,也就是说私有成员只能通过它的成员函数来访问但是,有时候需要在类的外部访问类的私有成员。为此,就需要寻找一种途径,在不放弃私有数据安全性的情况下,使得类外部的函数或类能够访问类中的私有成员,此方法就是友元。
友元可分为:友元函数,友元成员,友元类
友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的所有对象的成员,包括私有成员和公有成员。
例如:(友元函数)
友元函数虽然可以访问类对象的私有成员,但它毕竟不是成员函数。因此,在类的外部定义友元函数时,不必像成员函数那样,在函数名前加上“类名::”
友元函数一般带有一个该类的入口参数。因为友元函数不是类的成员,所以它不能直接引用对象成员的名称,也不能通过this指针引用对象的成员,它必须通过作为入口参数传递进来的对象名或对象指针来引用该对象的成员
//***********************************************
class Girl{
private:
char *name;
int age;
public:
Girl(char *n,int d){
name = new char[strlen(n)+1];
strcpy(name,n);
age = d;
}
friend void disp(Girl &x); //声明为友元函数,可以内部定义也可以外部定义
// {
// cout<<"girl\'s name is:"<<x.name<<",age:"<<x.age<<endl;
// }
~Girl(){
delete name;
}
};
void disp(Girl &x) //定义友元函数,格式不是void Girl:disp(Girl &x),所以是外部函数
{
cout<<"girl\'s name is:"<<x.name<<",age:"<<x.age<<endl;//可以访问私有成员
}
int main()
{
Girl e("Chen Xingwei",18);
disp(e); //调用友元函数,函数是直接调用,是外部函数标志
return 0;
}
//********************************************
友元函数可以访问多个类的私有成员
例如:
//********************************************
class Boy; //向前引用,必须声明,不声明下面的友元函数出错
class Girl{
private:
char name[25];
int age;
public:
void init(char N[],int A);
friend void prdata(const Girl plg,const Boy plb); //声明函数为girl类的友元函数
}; <