为什么需要在友元函数中提及对象?
Why there is need to mention object in friend function?
是否需要在friend函数中写一个对象来访问class的私有成员。
#include <iostream>
#include <vector>
using namespace std;
class project
{
private:
vector<int> v1;
public:
void addelement(int a)
{
v1.push_back(a);
}
void view()
{
for(auto i=v1.begin();i<v1.end();i++)
{
cout<<*i<<endl;
}
}
friend void modify(int,int,project);
};
void modify(int data,int index,project p)//is it necessary here to make an object of class .
{
p.v1[index]=data;//As here without "p." it shows errors,it says use
//of unidentified identifier v1
}
int main()
{
project p1;
p1.addelement(7);
p1.addelement(91);
modify(24,0,p1);
modify(22,3,p1);
p1.view();
}
我想知道友元函数是否是 class 的友元并且它可以自己访问 class 的私有成员那么为什么需要提及 [=15= 的对象]?
一个friend
函数不是那个class的成员函数。
modify(24,0)
如何知道您指的是 project
的哪个实例?至此,您需要将 project
的实例传递给 friend
函数。
附加说明,void modify(int data, int index, project p)
创建了 p
的副本,如果您想修改传递给 modify
的对象,您需要编写:
void modify(int data, int index, project &p) {
p.v1[index]=data;
}
//...
modify(24,0,p1)
或
void modify(int data, int index, project *p) {
p->v1[index]=data;
}
//...
modify(24,0,&p1)
像这样的对象只调用非静态成员函数:
object_arg.name_of_member_function(regular_args);
因此,非静态成员函数可以访问指向 object_arg
的 this
指针,并且隐式地访问 this
指向的对象的成员。
所有其他函数,包括静态成员函数和自由函数,包括那些作为 class 的朋友的自由函数,例如您的 modify
,在调用时没有像这样的对象参数:
name_of_function(regular_args);
因此,它们没有 this
指针。如果您想访问某个对象,则必须将其作为常规参数传递。
P.S。修改按值传递的参数几乎没有用。
是否需要在friend函数中写一个对象来访问class的私有成员。
#include <iostream>
#include <vector>
using namespace std;
class project
{
private:
vector<int> v1;
public:
void addelement(int a)
{
v1.push_back(a);
}
void view()
{
for(auto i=v1.begin();i<v1.end();i++)
{
cout<<*i<<endl;
}
}
friend void modify(int,int,project);
};
void modify(int data,int index,project p)//is it necessary here to make an object of class .
{
p.v1[index]=data;//As here without "p." it shows errors,it says use
//of unidentified identifier v1
}
int main()
{
project p1;
p1.addelement(7);
p1.addelement(91);
modify(24,0,p1);
modify(22,3,p1);
p1.view();
}
我想知道友元函数是否是 class 的友元并且它可以自己访问 class 的私有成员那么为什么需要提及 [=15= 的对象]?
一个friend
函数不是那个class的成员函数。
modify(24,0)
如何知道您指的是 project
的哪个实例?至此,您需要将 project
的实例传递给 friend
函数。
附加说明,void modify(int data, int index, project p)
创建了 p
的副本,如果您想修改传递给 modify
的对象,您需要编写:
void modify(int data, int index, project &p) {
p.v1[index]=data;
}
//...
modify(24,0,p1)
或
void modify(int data, int index, project *p) {
p->v1[index]=data;
}
//...
modify(24,0,&p1)
像这样的对象只调用非静态成员函数:
object_arg.name_of_member_function(regular_args);
因此,非静态成员函数可以访问指向 object_arg
的 this
指针,并且隐式地访问 this
指向的对象的成员。
所有其他函数,包括静态成员函数和自由函数,包括那些作为 class 的朋友的自由函数,例如您的 modify
,在调用时没有像这样的对象参数:
name_of_function(regular_args);
因此,它们没有 this
指针。如果您想访问某个对象,则必须将其作为常规参数传递。
P.S。修改按值传递的参数几乎没有用。