标签: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
标签:public 成员函数 对象 har prot amp 操作 函数 core
原文地址:https://www.cnblogs.com/njit-sam/p/13224955.html