Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从类C+中的非成员函数访问成员变量+;_C++ - Fatal编程技术网

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:是的,听起来很合理。。。需要访问(非公共)成员变量的函数通常是最好的成员函数。一切都好。