c ++特殊方法可见性

时间:2012-01-24 22:25:43

标签: c++ private friend public protected

我有一个简单的对象,类型为“ObjectX”,有一个名为“doSomething()”的简单方法。我想让doSomething只能被其他ObjectX访问。换句话说,如果某个东西是静态的,或者不是“ObjectX”类型的对象试图调用doSomething,它将无法执行。但是,如果ObjectX类型的对象试图调用该方法,它将能够。

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

3 个答案:

答案 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的朋友。