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)
一个"类的朋友"的功能,允许对其"私人成员"进行"读访问",但不允许"写访问"?
一旦将函数声明为友元函数,访问说明符规则就会关闭,但是您可以通过将const对象传递给友元函数来阻止写入成员.
friend void readers(const classroom&);
^^^^^
Run Code Online (Sandbox Code Playgroud)
需要注意的是access specifiers和const内斯是两个不同的属性,不混合.
请注意,您的友元函数仍然可以尝试constness通过使用丢弃对象来修改对象,const_cast但这将导致根据标准的未定义行为.