我有一个简单的对象,类型为“ObjectX”,有一个名为“doSomething()”的简单方法。我想让doSomething只能被其他ObjectX访问。换句话说,如果某个东西是静态的,或者不是“ObjectX”类型的对象试图调用doSomething,它将无法执行。但是,如果ObjectX类型的对象试图调用该方法,它将能够。
这与私有方法的不同之处在于,私有方法只能从它所在的同一个对象中调用。如果有另一个相同类型的对象在另一个对象上调用该方法,它将被锁定
答案 0 :(得分:4)
private
几乎完全符合您的要求。只有相同类型的对象可以使用private
方法,而其他对象可以在其他对象上调用这些函数(即private
函数不限于调用对象。)
唯一不像你描述的那样是同一个类中的static
函数也可以使用private
函数。没有语言功能允许您仅将功能限制为对象(不包括static
功能)。
答案 1 :(得分:2)
我不知道你从哪里得到你的事实。私有函数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;
}
答案 2 :(得分:0)
在C ++中
Class A{
A a;
doSomething(){
a.doSomething();
}
}
上面的代码可以工作。这就是复制构造函数工作的原因。
Class B{
A a;
doSomethingElse(){
a.doSomething();
}
}
上面不会有任何效果。
如果您想通过在A类中指定friend B;
来提供对B的访问以及使A成为B的朋友。