静态成员函数

时间:2013-02-13 09:28:54

标签: c++ function static-methods

我理解为什么静态函数不能访问非静态字段。 但是如果我发给他们一个班级的对象,他们能够访问他的私人领域吗? (不是静止的)

非常感谢。

4 个答案:

答案 0 :(得分:0)

是的,每个成员函数都可以访问其类的私有成员(字段或方法),无论它们是否是静态的。

答案 1 :(得分:0)

是。 E.g:

class objType
{
    static void f(objType &obj);
    ...
    void f(objType &obj)
    {
        obj.somePrivateMember...
    }
};

答案 2 :(得分:0)

是的,他们会的。这是一个简短的样本:

#include <iostream>

using namespace std;

class A{
    public:
    A(): a(0) {}
    static void test(A& x) {
        x.a += 1;
    }
    private:
    int a;
};
int main() {
        A u;
    A::test(u);
        return 0;
}

ideone上编译。你应该真的学会自己尝试这样的事情。

答案 3 :(得分:0)

访问权限以及功能是否为静态 正交概念。成员函数可以访问所有成员, 私人,受保护或公共。无论是否 静态与否。静态成员函数没有this指针, 但是,非静态成员需要一个对象才能成为 访问(甚至存在)。所以如果静态函数是 访问非静态成员,它必须获取指针或 对另一个对象的引用(或创建一个对象) 变量,但这真的很少见)。所以:

class Test
{
    int i;              //  Non-static member...
    static int si;      //  Static member...
public:
    static void func( Test* obj );
};

void
Test::func( Test* obj )
{
    si = 1;             //  No problem.
    i = 1;              //  Illegal, no instance.
    obj->i = 1;         //  No problem.
}

(显然,在这样一个微不足道的案例中,你只是放弃了 静态func,并使用this代替obj。但是可以 想象一下获取指向实例的指针的其他方法 静态功能。)