【C++】友元

友元

正常来说,类内的私有属性是无法被外界访问的,但如果访问对象被类标记成友元,那么就可以访问到私有的属性

形象的说:
客人到你的家做客一般是在客厅(Public),无法进入到你的卧室(Private),但是如果是经过你认可的好朋友(友元),就可以随意进到你的卧室去

全局函数做友元

被声明为友元的全局函数内可以访问该类的私有属性

class Animal {
    firend void fun(Animal* b);//声明全局函数做友元
private    
    int data;//私有成员属性
};

void fun(Animal* b){
    cout << "正在访问: " << b->data << endl;   
    //理论私有成员是无法访问的
    //但fun函数被Animal类声明为友元,fun函数内就可以访问了
}

类做友元

被声明为友元的类内可以访问该类的私有属性

class Animal;//声明

class Botany {
public:
    Botany();//构造函数,类内声明,类外实现
    void fun();//函数声明
private:
    Animal *animal;
};

class Animal {
    firend class Animal;//声明类做友元
private    
    int data;//私有成员属性
};

//Botany类的成员函数实现
Botany::botany()
{
animal = new Animal;//实例一个Animal类
}
void Botany::fun(){
     cout << "正在访问: " << animal->data << endl;
     //理论私有成员是无法访问的
    //但Botany类被Animal类声明为友元,Botany类就可以访问了
}

成员函数做友元

只让类内的某个成员函数做友元,只有这个成员可以访问私有属性,类的其他函数无法访问
继续使用上一个例程:

class Animal;//声明

class Botany {
public:
    Botany();//构造函数,类内声明,类外实现
    void fun();//函数声明
    void fun2();
private:
    Animal *animal;
};

class Animal {
    //firend class Animal;//声明类做友元
    friend void Animal::fun();//声明成员函数为友元
private    
    int data;//私有成员属性
};

//Botany类的成员函数实现
Botany::botany()
{
animal = new Animal;//实例一个Animal类
}
void Botany::fun(){
     cout << "正在访问: " << animal->data << endl;
     //这个成员函数被Animal类声明为友元,可以正常访问
}
void Botany::fun2(){
     cout << "正在访问: " << animal->data << endl;
     //这个成员函数没被Animal类声明为友元,无法访问,报错
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值