2012-02-08 12 views
-2

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

class A{ 
    foo(); 
}; 

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

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

ответ

0

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

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

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

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

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

struct my_struct 
{ 
int some_public_member; 

private: 
int my_private_member; 
}; 

Ото, есть в C, что означает internal linkagestatic. Возможно, вы говорили об этом так.

+0

как насчет того, было ли это в 'struct'? ;) – Nim

+0

@ Ним добавил некоторые данные к моему ответу –

0

статические INT doSomCalculations() { ... }

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

+0

Могу ли я спросить, почему это решение было понижено? Это похоже на кого-то, кто отвечает, кто разработал немного больше. –

+0

Я не спустил вниз, но, возможно, потому, что вы больше не уточнили? – nabulke

+0

Спасибо, я совершенно новый для stackoverflow, поэтому я потрачу немного больше времени на мои ответы в будущем. –

1

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

class YourClass { 
    public: 
    void publicMethod(); 
    private: 
    void privateMethod(); 
}; 
1

вы получаете «статический» в файле рамки спутать с «частным» в контексте класса.

только

Для того метода или элемента данных в классе, чтобы быть частным, просто положить его в «частный», а не публичной части класса, этот

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

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

class Foo { public: static wibble(); } 

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

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

static int iamrunninoutofnames() { .... } 

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

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

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

Смежные вопросы