如何从C ++类中的非成员函数访问成员变量

时间:2011-03-06 22:30:24

标签: c++

我创建了一个名为“ShortestTime”的类。我有一些不是成员函数的函数,但我希望它们能够访问我的成员变量 即。我有一个函数来排序作为公共成员变量的List,但是它无权访问这个成员变量。

我已经阅读了一些关于“朋友”的内容,但无法让它发挥作用。我如何解决我的问题?

感谢您的帮助,

罗宾

3 个答案:

答案 0 :(得分:2)

有些方法可以使用朋友来解决您的问题,但我们需要查看示例代码。

但我个人的做法是向ShortestTime添加一个功能,对您的私人成员进行排序。

ShortestTime::SortInterals()
{
   //sort private stuff
}

有没有理由不起作用?

答案 1 :(得分:0)

这完全取决于我们在这里谈论的语言。既然你在谈论“朋友”功能,我会假设你在谈论c ++。 所以基本上,友元函数只是一个普通函数,可以访问c ++中私有和受保护的类成员。例如..

int abc(myclass a)    
{   
...   
}   
class myclass   
{   
    int someprivatemembers;   
    public:   
        function myClass() { ... }   
        friend int abc(myclass);   
}

现在,在上面的例子中,函数abc将有权访问对象的某些私有成员传递给它,因为它被声明为该类的“朋友”。

答案 2 :(得分:0)

  

我创建了一个名为“ShortestTime”的类。我有一些不是成员函数的函数,......

不,你不:-)。根据定义,类中的所有函数都是成员函数。你可能有一些 out 类的函数 - 它们不是成员函数。

  

但我希望他们能够访问我的成员变量。   即。我有一个函数来排序作为公共成员变量的List,但是它无权访问这个成员变量。

是的。你说你有一个公共成员变量List:

class X
{
  public:
    List identifier_;
};

所有功能都可以访问列表,无论它们是否是成员函数。

  

我已经阅读了一些关于“朋友”的内容,但无法让它发挥作用。我如何解决我的问题?

你可能发现自己需要朋友的唯一情况,也就是上述陈述可能适用的情况,类似于......

class X
{
  public:

  private:
    List identifier_;
};

void some_non_member_function()
{
    X x;
    x.identifier_;  // HOW TO GET ACCESS...?
}

要授予some_non_member_function()访​​问私有数据成员的权限,您可以......

将其设为课程的friend

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
    }
};