C++ 如何从类C+中的非成员函数访问成员变量+;
我创建了一个名为“最短时间”的类。其中有些函数不是成员函数,但我希望它们能够访问我的成员变量。C++ 如何从类C+中的非成员函数访问成员变量+;,c++,C++,我创建了一个名为“最短时间”的类。其中有些函数不是成员函数,但我希望它们能够访问我的成员变量。 我有一个函数,它对一个列表进行排序,这个列表是一个公共成员变量,但它没有访问这个成员变量的权限 我读过一些关于“朋友”的东西,但没能让它起作用。我如何解决我的问题 谢谢你的帮助 Robin您可以使用friend解决问题,但我们需要查看示例代码 但我个人的做法是在“最短时间”中添加一个函数,对您的私人成员进行排序 ShortestTime::SortInterals() { //sort priv
我有一个函数,它对一个列表进行排序,这个列表是一个公共成员变量,但它没有访问这个成员变量的权限 我读过一些关于“朋友”的东西,但没能让它起作用。我如何解决我的问题 谢谢你的帮助
Robin您可以使用friend解决问题,但我们需要查看示例代码 但我个人的做法是在“最短时间”中添加一个函数,对您的私人成员进行排序
ShortestTime::SortInterals()
{
//sort private stuff
}
有什么原因不起作用吗?这完全取决于我们在这里谈论的语言。既然你在谈论“朋友”功能,我会假设你在谈论C++。 所以,基本上,朋友函数只是一个普通函数,它可以访问C++中的类的私有和受保护成员。例如
int abc(myclass a)
{
...
}
class myclass
{
int someprivatemembers;
public:
function myClass() { ... }
friend int abc(myclass);
}
现在,在上面的示例中,函数abc将有权访问对象a传递给它的一些PrivateMembers,因为它被声明为类的“朋友”
我创建了一个名为“最短时间”的类。我在其中有一些不是成员函数的函数
不,你没有:-)。根据定义,类中的所有函数都是成员函数。您可能有一些没有类的函数——它们不是成员函数
但是我希望他们能够访问我的成员变量。
我有一个函数,它对一个列表进行排序,这个列表是一个公共成员变量,但它没有访问这个成员变量的权限
是的。您说过您有一个公共成员变量列表:
class X
{
public:
List identifier_;
};
所有函数都可以访问该列表,无论它们是否为成员函数
我读过一些关于“朋友”的东西,但没能让它起作用。我如何解决我的问题
你可能会发现你需要朋友的唯一情况,因此,尽管有上述陈述,也可能适用于这种情况,类似于
class X
{
public:
private:
List identifier_;
};
void some_non_member_function()
{
X x;
x.identifier_; // HOW TO GET ACCESS...?
}
要授予某些非成员对私有数据成员的访问权,可以
让它成为班上的朋友
class X
{
friend void some_non_member_function();
};
void some_non_member_function()
{
X x;
x.identifier_; // NOW OK
}
使其成为会员功能
class X
{
public:
void some_non_member_function()
{
X x;
x.identifier_; // NOW OK
}
};
你在用什么语言编程?你的问题并不明显,也许你的意思是函数在类之外,你希望它访问类字段。但是如果该字段是公共的(例如您提到的列表),那么任何函数都可以访问它!。请澄清你的问题。友谊也是一种关系,它允许非成员函数或类访问私有和受保护的成员……是的,这是可行的。我想我只是工作太久了,没有清晰地思考,因为这绝对是我应该做的。谢谢在代码前面加四个空格以获得正确的格式。@Martin噢,谢谢!我正在努力格式化。很高兴知道:)k,我可能应该澄清我做了什么。我创建了一个带有头文件和.c文件的类。在.c文件中,我创建了一个未在头文件中声明且不在类中的函数(我假设这意味着它不是成员函数,如果我错了请更正)。我最初的问题是,让这个函数能够访问它所使用的类成员函数的成员变量时,我遇到了一些问题。我只是用一个void函数来更新一些成员列表,但我把它变成了一个成员函数,因为我看不出有什么理由不更新,就是这样。@Robin:是的,听起来很合理。。。需要访问(非公共)成员变量的函数通常是最好的成员函数。一切都好。