友元
1.含义:可以访问朋友类中的私有成员(变量或函数)
2.友元函数和友元类
1.友元函数
声明格式: friend 返回值类型 函数名(形参表);
1.全局函数作为类的友元函数
例:
- #include
- using namespace std;
- class Student{
- private:
- string name;
- int age;
- public:
- Student(){}
- Student(string n, int a):name(n),age(a){}
- friend int print_studnet_info(Student &);
- //声明 print_studnet_info 函数是Student类的友元函数
- //在友元函数中可以访问 Student 类的私有成员
- };
- int print_studnet_info(Student &stu){
- cout<<stu.name<<" "<<stu.age<<endl;
- }
- int main(int argc, const char *argv[])
- {
- Student s1("小明",20);
- print_studnet_info(s1);
- return 0;
- }
-
2.友元成员函数
(其他类的成员函数作为自己类的友元函数)
例:
- </div><div yne-bulb-block="code" data-theme="tomorrow" style="white-space:pre-wrap;" data-language="cpp">#include </div>using namespace std;
- class Date;//类的前向声明,说明这个名字后面有
- class Time{
- private:
- int hour;
- int sec;
- int min;
- public:
- Time(){}
- Time(int h, int s, int m):hour(h),sec(s),min(m){}
- void display(const Date &date);//此处只能使用Date的名字,不能使用里面的内容
- };
- class Date{
- private:
- int year;
- int month;
- int day;
- public:
- Date(){}
- Date(int y, int m, int d):year(y),month(m),day(d){}
- friend void Time::display(const Date &date);
- //声明 Time 类中的 display 函数是 Date 类的友元函数
- //然后在 Time 的 display 中就可以访问 Date的私有成员了
- };
- //必须将函数的定义写在 Date 类定义的后面
- //否则 不知道 Date 类中有 year month day 这三个成员
- void Time::display(const Date &date){
- cout<<date.year<<"-"<<date.month<<"-"<<date.day<<endl;
- cout<<hour<<":"<<min<<":"<<sec<<endl;
- }
- int main(int argc, const char *argv[])
- {
- Time t(10,5,28);
- Date d(2021,8,19);
- t.display(d);
- return 0;
- }
-
文章评论(0条评论)
登录后参与讨论