gpt4 book ai didi

c++ - 一个 'friend of a Class' 的函数允许 'read access' 到它的 'private members' 但不是 'write access' ?

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:29 26 4
gpt4 key购买 nike

大家好

我正在通过教科书自学 C++:

教科书中的一个问题要求我将一个函数设为类的友元,因此友元函数可以访问所有类成员;这很好,我可以做到。 问题是接下来的问题是 friend 函数只能读取类成员(私有(private)成员)但不能写给他们!

**请注意:我在“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!



}

在主程序中我们有:

int main()
{

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

//and so on...

最佳答案

A function which is a 'friend of a Class' that is allowed to have 'read access' to its 'private members' but NOT 'write access'?

一旦您将一个函数声明为友元函数,访问说明符规则就关闭了,但是您可以通过将常量对象传递给友元函数来防止写入成员。

friend void readers(const classroom&);
^^^^^

注意access specifiersconstness是两个不同的属性,不要混用。

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

关于c++ - 一个 'friend of a Class' 的函数允许 'read access' 到它的 'private members' 但不是 'write access' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com