码迷,mamicode.com
首页 > 编程语言 > 详细

C++之友元函数

时间:2020-07-02 16:26:18      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:public   成员函数   对象   har   prot   amp   操作   函数   core   

在 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

 

C++之友元函数

标签:public   成员函数   对象   har   prot   amp   操作   函数   core   

原文地址:https://www.cnblogs.com/njit-sam/p/13224955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!