C++ c++;特殊方法可见性

C++ c++;特殊方法可见性,c++,private,friend,public,protected,C++,Private,Friend,Public,Protected,我有一个简单的对象,类型为“ObjectX”,有一个简单的方法叫做“doSomething()”。我想使doSomething仅可由其他ObjectX访问。换句话说,如果某个对象是静态的,或者不是“ObjectX”类型的对象试图调用doSomething,那么它将无法调用。但是,如果ObjectX类型的对象尝试调用该方法,它将能够调用 这与私有方法不同,因为只能从其所在的同一对象调用私有方法。如果有另一个相同类型的对象在另一个对象上调用该方法,它将被锁定。private几乎完全满足您的需要。只有

我有一个简单的对象,类型为“ObjectX”,有一个简单的方法叫做“doSomething()”。我想使doSomething仅可由其他ObjectX访问。换句话说,如果某个对象是静态的,或者不是“ObjectX”类型的对象试图调用doSomething,那么它将无法调用。但是,如果ObjectX类型的对象尝试调用该方法,它将能够调用


这与私有方法不同,因为只能从其所在的同一对象调用私有方法。如果有另一个相同类型的对象在另一个对象上调用该方法,它将被锁定。

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同一类中的静态函数。