【问题标题】:c++ special method visibilityc++ 特殊方法可见性
【发布时间】:2012-02-18 04:37:16
【问题描述】:

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

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

【问题讨论】:

  • 不,私有方法不限于从同一个对象调用。另一个相同类型的对象可以使用它,它不会被锁定。
  • @Seth 哦,真的吗?那我错了!你应该把它写成答案,我很乐意接受:)

标签: c++ private friend public protected


【解决方案1】:

private 几乎完全符合您的要求。只有相同类型的对象才能使用private方法,其他对象可以在其他对象上调用这些函数(即private函数不限于调用对象)。

唯一与您描述的不同的是,同一类中的static 函数也可以使用private 函数。没有语言功能可以让您将函数限制为仅限对象(不包括 static 函数)。

【讨论】:

  • 当你说静态方法可以访问它的时候……这是否意味着所有静态方法都可以访问它,还是仅限于同一个类中的静态方法?
  • @GeorgesOatesLarsen 静态函数在同一个类中。
【解决方案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;
}

【讨论】:

    【解决方案3】:

    在 C++ 中

    Class A{
      A a;
      doSomething(){
        a.doSomething();
      }
    }
    

    上面的代码可以工作。这就是复制构造函数工作的原因。

    Class B{
      A a;
      doSomethingElse(){
        a.doSomething();
      }
    }
    

    以上无论如何都行不通。

    如果您还想提供对 B 的访问权限,并且通过在 A 类中指定 friend B; 来让 A 成为 B 的朋友。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 2014-08-11
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      相关资源
      最近更新 更多