C++友元函数,友元类

本文详细介绍了C++中的友元函数和友元类的概念,包括它们的作用、声明和定义的位置。友元函数可以访问类的私有和保护成员,但并非类的成员。同时,友元类的成员可以访问另一类的私有和保护成员。文中还列举了友元函数的使用错误示例,强调了必须通过对象访问私有成员。此外,还讨论了友元关系的传递性问题。最后,文章给出了一个将单个成员函数作为另一个类友元的示例,强调了定义顺序的重要性。
摘要由CSDN通过智能技术生成

1. 友元的声明只能出现在类的内部,但是在类内出现的具体位置不限制,友元函数不是类的成员

 

也不受所在区域访问控制级别的限值

2. 友元函数的定义可以在类内也可以在类外

3. 友元函数它不是成员函数,它不受作用域的限值,不属于类,也不属于对象,他就是一个普通的函数

友元函数使用典型错误:

<wiz_code_mirror>

class Count
{
public:
    Count():a(10){};
    friend void fn1(Count obj); //声明友元函数
private:
    int a;
};
//定义友元函数
void fn1(Count obj)
{
    //cout << a << endl //这里是错误的!访问私有成员应该是对象访问!友元函数上面说过是普通函数
                        //所以这里需要传入一个对象参数,来访问Count类中的私有成员!
    cout << obj.a << endl;
}
int main(){
    Count obj1;
    fn1(obj1);
}

友元类注意:

例如

1. A 是   B的友元,不代表 B 就是 A的友元    

2. A 是 B的友元, B是C的友元, 不代表 A就是C的友元

友元类例子:

<wiz_code_mirror>

class Count
{
public:
    Count():a(10){};
    friend class CTime; //声明CTime为友元类
private:
    int a;
};
class CTime
{
public:
    void fn1(){
        for (int i = 0; i < 20;i++)
        {
            obj[i].a = i;
        }
    }
    void fn2(){
        for (int i = 0; i < 20;i++)
        {
            printf("%d\n", obj[i].a);
        }
    }
private:
    Count obj[20];  //定义20个Count对象
};
int main(){
    CTime cls;
    cls.fn1();
    cls.fn2();
}

令一个类中单个成员函数作为另一个类中的友元函数

需要严格把控代码顺序:

<wiz_code_mirror>

class Student;                          //这里声明Student
class Teacher
{
public:
    Teacher(){}
    int clear(Student obj);             //1.我们先定义Teacher类,其中声明clear函数
                                        //这里切记不能定义它
};
class Student
{
public:
    Student() :m_score(123){}
    friend int Teacher::clear(Student obj);//2.接下来定义Student类,其中包括对clear的友元声明
private:
    int m_score;
};
int Teacher::clear(Student obj){            //3.定义clear,这时候才能使用Student成员
    return obj.m_score;
}
int _tmain(int argc, _TCHAR* argv[])
{
    Student obj1;
    Teacher obj2;
    cout << obj2.clear(obj1) << endl;
    return 0;
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jh035512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值