#c #private-members #friend-function
#c #private-members #friend-функция
Вопрос:
Я написал простой код на cpp, как показано ниже. Я получаю доступ к закрытым членам данных, используя 2 способа. Сначала с помощью метода get set, а затем с помощью функции friend . Но для функции friend я получаю значение мусора для элементов данных объекта. Кто-нибудь может сказать мне, как я могу это исправить?
#include<iostream>
#include<cstring>
using namespace std;
class Student
{
int roll_no;
string name;
public:
void set(int r, string n)
{
roll_no = r;
name = n;
}
void get()
{
cout<<roll_no<<" "<<name<<endl;
}
friend void access(Student s);
};
void access(Student s)
{
s.roll_no = 5;
s.name = "Shivansh";
}
int main()
{
Student s;
s.set(10,"Shrut");
s.get();
Student s1;
access(s1);
s1.get();
return 0;
}
Комментарии:
1.
void access(Student s)
Это принимает его аргумент по значению, поэтому он изменяет только копию объекта. Чтобы он действительно изменялсяs1
, измените функцию, чтобы принимать аргумент по ссылке.2.
access(Student s)
->access(Student amp; s)
3. Можете ли вы уточнить это подробнее?
Ответ №1:
Происходит то, что ваша функция принимает Student по значению. (он копирует его) Для того, чтобы изменить объект Student, он должен использовать его по ссылке.
// take it by reference to modify the Student.
void Access(Studentamp; s) {
s.roll_no = 5;
s.name = "Shivansh";
}
Ответ №2:
Передайте объект класса по ссылке, чтобы получить доступ к объекту и изменить содержимое объекта, т.Е. в вашем случае номер и имя. Невыполнение этого требования приведет к вызову конструктора копирования по умолчанию и созданию копии объекта.
access(Student amp;s)
{
//Change object s
}
Подробнее о передаче по ссылке и передаче по значению читайте здесь
https://www.google.com/amp/s/www.geeksforgeeks.org/passing-and-returning-objects-in-c/amp /