友元函数和类的成员函数都可以访问类的私有成员变量或者是成员函数,但是他们调用的形式不同。
类的成员函数是属于类的,所以调用的时候是通过指针this调用的。
而类的友元函数不属于类,当然也不能有this指针了,也就是在友元函数中不能出现this指针。
同时友元函数是有关键字friend修饰.
有元函数可以访问该类中的所有成员,但是只能间接访问该类中继承父类的私有成员,即通过该类中的方法访问该父类的私有成员;可以直接访问该父类的公有成员
原因是:派生类在继承时,实际上是在其内部构造了一个基类,基类的私有成员访问权限任然属于基类(派生类也不能直接访问基类的私有成员);所以派生类的
有元函数只能间接访问继承基类的私有成员
注意:
有元函数不能被继承,因它不属于类,不是类的成员;即父类的有元函数不能访问子类的的成员
举个例子
#include <stdio.h>
#include <iostream>
using namespace std;
class c1
{
private:
int a;
public:
void chan(int b);
};
class c2:public c1
{
private:
int b;
void chan(int b);
public:
friend void f(int a);
};
void c1::chan(int b)
{
this->a=b;
cout<<a<<endl;
}
void f(int a)
{
c2 c;
c.a=a; //错的 该有元函数不能访问父类的私有成员,只能间接访问
c.chan(100); //正确,间接访问
}
int main()
{
f(100);
return 0;
}
说一下有元类
友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。
当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下:
friend class 类名;
其中:friend和class是关键字,类名必须是程序中的一个已定义过的类。