美文网首页
(十八)C++篇-自定义类(三)-友元

(十八)C++篇-自定义类(三)-友元

作者: GoodTekken | 来源:发表于2022-07-04 14:19 被阅读0次

在某些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍然阻止一般的访问,这是很方便做到的。例如,被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员。这些操作符不可能为类的成员。
然而,尽管不是类的成员,它们仍是类的“接口的组成部分”。友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类。友元的声明以关键字 friend开始。它只能出现在类定义的内部。友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受声明出现部分的访问控制影响。

测试代码:

#include <iostream>
#include <string>
using namespace std;

class Student
{
public:
    friend class Teacher;
    Student(int age1,string name1)
    {
        age = age1;
        name =name1;
    }

private:
    int age;
    string name;
};

class Teacher
{
public:
    void printStudent(Student &student);

private:
    int age;
    string name;
};

void Teacher::printStudent(Student &student)
{
    cout<<student.age<<endl;
    cout<<student.name<<endl;
}

int main()
{
    Student a(19,"ZhangQiang");
    Teacher b;
    b.printStudent(a);
    return 0;
}

输出结果:

tekken@tekken:~/C++WS$ ./a.out 
19
ZhangQiang

也可以单独读函数进行友元处理:
(当我们将成员函数声明为友元时,函数名必须用该函数所属的类名字加以限定。)
更一般地讲,必须先定义包含成员函数的类,才能将成员函数设为友元。另一方面,不必预先声明类和非成员函数来将它们设为友元。
测试代码如下:

#include <iostream>
#include <string>

using namespace std;

class Student;   //提前声明

class Teacher
{
public:
    void printStudent(Student &student);  //只对成员函数进行友元
    void printStudent_test(Student &student);  //只对成员函数进行友元

private:
    int age;
    string name;
};

class Student
{
public:
    friend void Teacher::printStudent(Student &student);
    friend void Teacher::printStudent_test(Student &student);

    Student(int age1,string name1)
    {
        age = age1;
        name =name1;
    }

private:
    int age;
    string name;
};

void Teacher::printStudent(Student &student)
{
    cout<<student.age<<endl;
    cout<<student.name<<endl;
}

void Teacher::printStudent_test(Student &student)
{
    cout<<student.age<<endl;
    cout<<student.name<<endl;
}

int main()
{
    Student a(19,"ZhangQiang");
    Teacher b;
    b.printStudent(a);
    b.printStudent_test(a);
    return 0;
}

输出结果:

tekken@tekken:~/C++WS$ ./a.out 
19
ZhangQiang
19
ZhangQiang

相关文章

  • (十八)C++篇-自定义类(三)-友元

    在某些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍然阻止一般的访问,这是很方便做到的。例如,被重载的操...

  • 10-C++远征之模板篇-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • 慕课网-C++远征之模板篇(上)-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • C++语言基础(03)

    1.内存分配 C/C++ 内存分区: java 创建对象 2.常函数 3.友元函数和友元类 友元函数 友元类 4....

  • C++中的友元

    友元的介绍 什么是友元?友元是C++中的一种关系友元关系发生在函数与类之间或者类与类之间友元关系是单项的,不能传递...

  • c++ 友元

    在c++中,通过关键字friend声明为友元。友元可以范围与其有好友关系的类中私有成员。友元包括友元函数和友元类。...

  • C++ - 友元类

    一个类的友元函数可以访问该类的私有成员 将一个类的成员函数->另一个类的友元 友元类 A 是 B的友元类 -> A...

  • 第十一章 使用类(2)友元

    (二)友元 1.友元的概念 友元有三种:友元函数,友元类,友元成员函数。这里主要介绍友元函数。通过让函数成为类的...

  • C++ 友元 友元函数 友元类 及示例

    注意:本文中代码均使用 Qt 开发编译环境友元(1)是C++提供的一种破坏数据封装和数据隐藏的机制(2)通过将一个...

  • C++ 类友元函数

    /* 友元函数可以访问类的 private 和 protected 成员。 */ /* class friend ...

网友评论

      本文标题:(十八)C++篇-自定义类(三)-友元

      本文链接:https://www.haomeiwen.com/subject/dqudbrtx.html