一个"类的朋友"的功能,允许对其"私人成员"进行"读访问",但不允许"写访问"?

Mr_*_*man 2 c++ class function friend restrictions

大家好,你好

我从教科书中自学C++:

教科书中的一个问题要求我将一个函数作为一个类的朋友,因此友元函数可以访问所有类成员; 这很好,我可以做到这一点.问题是,问题继续要求朋友函数只能读取类成员(私有成员)但不写入它们!

**请注意:我在'stackoverflow'上查看了类似的问题/答案 - 但我找不到我所追求的相关简单的直接答案.

这是我的一些相关代码,任何帮助将不胜感激:

提前谢谢了

#include <iostream>
#include <cstdio>

using namespace std;

class classroom{

  private:
         char name[25];
         int student_id;
         float grades[10];
         float average;
         int num_tests;
         float letter_grade;
         static int last_student_id;
  public:       
         void enter_name_id(void);
         void enter_grade(void);
         void average_grades(void);
         void letter_grades(void);
         void output_name_id_grade(void);
         void last_id(void);
         classroom();


  friend void readers(classroom&);

  };

      int classroom::last_student_id=1;



   void readers(classroom& lee){ 

      cout<<"\n number tests: "<<lee.num_tests;//friend function is reading class member -This is O.K!

      lee.num_tests=15;//friend function is writing to class member - We don't want this to be allowed

      cout<<"\n number tests: "<<lee.num_tests;//Used to test that class members are NOT accessed!             



   } 
Run Code Online (Sandbox Code Playgroud)

在主程序中我们有:

int main()
{       

        classroom students[10];
        readers(students[0]);

//and so on...
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 5

一个"类的朋友"的功能,允许对其"私人成员"进行"读访问",但不允许"写访问"?

一旦将函数声明为友元函数,访问说明符规则就会关闭,但是您可以通过将const对象传递给友元函数来阻止写入成员.

friend void readers(const classroom&);
                    ^^^^^
Run Code Online (Sandbox Code Playgroud)

需要注意的是access specifiersconst内斯是两个不同的属性,不混合.

请注意,您的友元函数仍然可以尝试constness通过使用丢弃对象来修改对象,const_cast但这将导致根据标准的未定义行为.