C++之友元函数

在 C++ 中,一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。

现在,我们来介绍一种例外情况——友元(friend)。借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。

友元函数:

在当前类以外定义的、不属于当前类的函数也可以在类中声明,但要在前面加 friend 关键字,这样就构成了友元函数。友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。

友元函数可以访问当前类中的所有成员,包括 public、protected、private 属性的。

1.将非成员函数声明为友元函数

 

#include<iostream>
using namespace std;

class Student{
private:
        char *m_name;
        int m_age;
        float m_score;
public:
        Student(char *name,int age,float score);
        friend void show(Student *pstu);
};

//使用初始化列表,在函数体内无需操作
Student::Student(char *name,int age,float score):m_name(name),m_age(age),m_score(score){
        //TODO
}

void show(Student *pstu){
        cout<<pstu->m_name<<",age:"<<pstu->m_age<<",score:"<<pstu->m_score<<endl;
}

int main()
{
        Student stu("Ming",24,98);
        show(&stu);
        Student *pstu= new Student("xu",28,89);
        show(pstu);
        return 0;
}

 

show函数是一个全局函数,不属于任何类,按理来说,m_name,m_age和m_score属于类的private成员变量,在show里面是不可以被访问的,声明了友元函数就可以了。

注意,友元函数不同于类的成员函数,在友元函数中不能直接访问类的成员,必须要借助对象。下面的写法是错误的:

void show(){
    cout<<m_name<<"的年龄是 "<<m_age<<",成绩是 "<<m_score<<endl;
}

2.将类成员函数声明为友元函数

//todo

友元类:

//todo

 

原文链接: https://www.cnblogs.com/njit-sam/p/13224955.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++之友元函数

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/361360

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午1:47
下一篇 2023年3月2日 下午1:47

相关推荐