Статические методы в C ++ - PullRequest
       4

Статические методы в C ++

0 голосов
/ 08 февраля 2012

Что означает статический метод в C ++? Как я понимаю, это то же самое, что и в Java: нет необходимости создавать экземпляр класса для вызова статического метода. Насколько я помню, в Си мы использовали статическое объявление для методов, чтобы сделать их приватными. Как мне сделать приватные методы в C ++? Допустим, я хочу вычислить некоторые вычисления с помощью вспомогательной функции:

class A{ 
  foo();
};

A::foo(){
    int a=doSomCalculations();
}

Как бы я определил doSomecalculations так, чтобы он был как частный вспомогательный метод, как в Java?

Ответы [ 4 ]

1 голос
/ 08 февраля 2012

вы получаете «static» в области видимости файла, перепутанной с «private» в контексте класса.

Чтобы метод или элемент данных в классе был закрытым, просто поместите его в 'приватный, а не публичный раздел класса, этот

class Foo
{
   private:
     int dosomething();
   public:
     Foo();
};

тогда dosomething () может быть вызван только внутри методов в Foo.Статическая функция

   class Foo { public: static wibble(); }

была бы похожа на сатиническую функцию Java в том смысле, что вы можете вызывать Foo :: wibble () без экземпляра Foo.

Я полагаю, что использование static в файловой областиустарела, и вместо этого рекомендуется использовать анонимное пространство имен.

  static int iamrunninoutofnames() { .... }

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

 namespace { int iamrunninoutofnames() { .... } }

аналогичен по своему действию, но может быть более гибким, если вы используете его осторожно.

1 голос
/ 08 февраля 2012

Как вы сказали, статический метод не требует наличия экземпляра объекта.Метод разделяется между экземплярами этого объекта.В C ++ вы можете объявить закрытый метод следующим образом:

class YourClass { 
  public:
  void publicMethod();
  private:
  void privateMethod();
};
0 голосов
/ 08 февраля 2012

В C ++, если вы не явно заявите, что что-то есть public, это будет private по умолчанию.Поэтому, если вы хотите, чтобы foo() был public в вашем классе, вы должны указать это так.

class A{ 
public:
  foo();
private:
  void doSomCalulations();
};

A::foo(){
    int a=doSomCalculations();
}

Как комментарий к вашей вещи C static, я ничего не знаюговоря, что static делает что-либо private в C. В понятиях private и public нет.В C у вас есть только struct типы, и все они по умолчанию public.

В C ++ struct по умолчанию все члены public.Если вы хотите private член в struct, вы должны явно указать его, например, так:

struct my_struct
{
int some_public_member;

private:
int my_private_member;
};

OTOH, в C есть static, что означает internal linkage.Возможно, вы имели в виду это так.

0 голосов
/ 08 февраля 2012

static int doSomCalculations () { ... }

(я не могу проверить это здесь).

...