C++ c++;特殊方法可见性
我有一个简单的对象,类型为“ObjectX”,有一个简单的方法叫做“doSomething()”。我想使doSomething仅可由其他ObjectX访问。换句话说,如果某个对象是静态的,或者不是“ObjectX”类型的对象试图调用doSomething,那么它将无法调用。但是,如果ObjectX类型的对象尝试调用该方法,它将能够调用C++ c++;特殊方法可见性,c++,private,friend,public,protected,C++,Private,Friend,Public,Protected,我有一个简单的对象,类型为“ObjectX”,有一个简单的方法叫做“doSomething()”。我想使doSomething仅可由其他ObjectX访问。换句话说,如果某个对象是静态的,或者不是“ObjectX”类型的对象试图调用doSomething,那么它将无法调用。但是,如果ObjectX类型的对象尝试调用该方法,它将能够调用 这与私有方法不同,因为只能从其所在的同一对象调用私有方法。如果有另一个相同类型的对象在另一个对象上调用该方法,它将被锁定。private几乎完全满足您的需要。只有
这与私有方法不同,因为只能从其所在的同一对象调用私有方法。如果有另一个相同类型的对象在另一个对象上调用该方法,它将被锁定。
private
几乎完全满足您的需要。只有相同类型的对象才能使用private
方法,其他对象可以在其他对象上调用这些函数(即,private
函数不限于调用对象)
唯一与您描述不同的是,同一类中的
静态
函数也可以使用私有
函数。没有语言功能允许您仅将函数限制为对象(不包括静态
函数)。私有
几乎完全满足您的需要。只有相同类型的对象才能使用private
方法,其他对象可以在其他对象上调用这些函数(即,private
函数不限于调用对象)
唯一与您描述不同的是,同一类中的
静态
函数也可以使用私有
函数。没有语言功能允许您仅将函数限制为对象(不包括静态
函数)。我不知道您从何处获得事实。私有函数A::foo
可以由A
类型的任何对象调用。不管是在自己身上还是在另一个例子上
class A
{
public:
void foo(const A& other) { other.priv(); }
private:
void priv() const {}
};
int main()
{
A a1, a2;
a1.foo(a2);
return 0;
}
我不知道你从哪里得到你的事实。私有函数
A::foo
可以由A
类型的任何对象调用。不管是在自己身上还是在另一个例子上
class A
{
public:
void foo(const A& other) { other.priv(); }
private:
void priv() const {}
};
int main()
{
A a1, a2;
a1.foo(a2);
return 0;
}
在C中++
上面的代码可以工作。这就是复制构造函数工作的原因
Class B{
A a;
doSomethingElse(){
a.doSomething();
}
}
以上的方法无论如何都不起作用
如果您想提供对B的访问,也可以通过指定friend B使A成为B的朋友代码>在A类中。在C类中++
Class A{
A a;
doSomething(){
a.doSomething();
}
}
上面的代码可以工作。这就是复制构造函数工作的原因
Class B{
A a;
doSomethingElse(){
a.doSomething();
}
}
以上的方法无论如何都不起作用
如果您想提供对B的访问,也可以通过指定friend B使A成为B的朋友代码>在类A中。否,私有方法不限于从同一对象调用。同一类型的另一个对象可以使用它,它不会被锁定。@Seth哦,真的吗?那是我的错!作为回答,我很乐意接受:)不,私有方法不限于从同一个对象调用。同一类型的另一个对象可以使用它,它不会被锁定。@Seth哦,真的吗?那是我的错!你应该这样写作为回答,我很乐意接受:)当你说静态方法可以访问它。。。这是否意味着所有静态方法都可以访问它,还是仅限于同一类中的静态方法?@GeorgesOatesLarsen静态函数位于同一类中。当您说静态方法可以访问它时。。。这是否意味着所有静态方法都可以访问它,还是仅限于同一类中的静态方法?@GeorgesOatesLarsen同一类中的静态函数。