![]() |
豪情万千的眼镜 · 现代计算机图形学入门笔记(闫令琪)——10 ...· 1 年前 · |
![]() |
彷徨的香菇 · 乘以一个[int(x) for x in ...· 1 年前 · |
![]() |
朝气蓬勃的圣诞树 · Redis对象——有序集合(ZSet)-阿里 ...· 1 年前 · |
概念:友元函数是一个普通函数,不属于类,但需要在类内表明友元关系
友元函数可访问类内所有成员,但类不可以访问友元函数内部数据
友元函数可以在类内声明时,需要加上关键字friend
友元函数可以在类外声明,类外定义。需要加上关键字friend
class Cperson
private:
int age;
public:
friend void setPersonAge(Cperson& p,int age);
void setPersonAge(Cperson& p,int age) //函数在类外声明和定义
p.age=age;
int main()
Cperson person;
setPersonAge(person,18);
}
class Cperson
private:
int age;
public:
friend void setPersonAge(Cperson& p,int age)//友元函数在类内定义
p.age=age;
void setPersonAge(Cperson& p,int age);
int main()
Cperson person;
setPersonAge(person,18);
}
友元类的形式分为两种
class Cb;//声明类
class Ca
private:
int num;
public:
friend class Cb; //使整个类成为Ca的友元,则Cb所有的成员都可以访问Ca的所有成员
class Cb
public:
void setCaNum(Ca& a);
void Func();
};
class Cb;//声明类
class Ca
private:
int num;
public:
friend void Cb::setCaNum(Ca& a);//只有Cb的setCaNum成为Ca的友元
class Cb
public:
void setCaNum(Ca& a);
void Func();
};
友元关系不可被继承
使用一个友元时,要考虑到其友元的声明和作用域的问题,请看下面代码
class X
public:
friend void f(){} //友元函数在类内定义
X() {f();} //错误,f()函数在下面才声明,此处检测不到
void g();
void h();
void X::g(){ return f(); }//错误,此时f()函数还没有被声明
void f(); //声明函数
void X::h(){ return f(); } //正确,检测到f()函数被声明