C ++ специальный метод видимости - PullRequest
1 голос
/ 25 января 2012

У меня есть простой объект типа «ObjectX» с простым методом, называемым «doSomething ()».Я хотел бы сделать doSomething ТОЛЬКО доступным для других ObjectX.Другими словами, если что-то статическое или не объект типа «ObjectX» попытается вызвать doSomething, оно не сможет.Однако если объект типа ObjectX попытается вызвать метод, он сможет.

Это отличается от закрытого метода тем, что закрытый метод может быть вызван только из того же объекта, в котором он находится.. Если бы другой объект того же типа вызывал этот метод для другого объекта, он был бы заблокирован.

Ответы [ 3 ]

4 голосов
/ 25 января 2012

private делает почти то, что вы хотите.Только объекты одного типа могут использовать методы private, и другие объекты могут вызывать эти функции для других объектов (то есть, функции private не ограничены вызывающим объектом).

Единственное, чтоне то, что вы описали, это то, что static функции в том же классе могут также использовать private функции.Не существует языковой функции, позволяющей ограничивать функцию только объектом (исключая static функции).

2 голосов
/ 25 января 2012

Я не знаю, где вы берете ваши факты. Закрытая функция 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;
}
0 голосов
/ 25 января 2012

В C ++

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

Вышеприведенный код будет работать. И это является причиной работы конструктора копирования.

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

Выше не будет работать в любом случае.

Если вы хотите предоставить доступ к B, сделайте A другом B, указав friend B; в классе A.

...