我理解为什么静态函数不能访问非静态字段。 但是如果我发给他们一个班级的对象,他们能够访问他的私人领域吗? (不是静止的)
非常感谢。
答案 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
。但是可以
想象一下获取指向实例的指针的其他方法
静态功能。)