1.什么是友元?
一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。
2.friend function友元函数
友元函数两点:
- 在当前类以外定义的、不属于当前类的函数,
- 在类中声明,但要在前面加 friend 关键字,
这样就构成了友元函数。友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。
2.1 将非成员函数声明为友元函数
示例一:
#include <iostream>
#include <iostream>
class Student{
private:
char *m_name;
int m_age;
int m_score;
public:
Student();
Student(char *name, int age, int score);
void setname(char * name){
m_name = name;};
void setage(int age){
m_age = age;};
void setscore(int score){
m_score = score;};
char * getname(){
return m_name;};
int getage(){
return m_age;};
int getscore(){
return m_score;};
//友元函数,不属于student
friend void show(Student *stu);
};
Student::Student(){
m_name = NULL;
m_age = 0;
m_score = 0;
std::cout << "Student (): called" << "\n";
}
采用参数初始化表
Student::Student(char *name, int age, int score):m_name(name), m_age(age), m_score(score){
std::cout << "Student(char *name, int age, int score):called "<< "\n";
}
void show(Student * stu){
std::cout