статический член класса в с ++ - PullRequest
1 голос
/ 07 октября 2011

У меня есть вопрос о статическом члене класса в c ++, так как статический член принадлежит классу, а не какому-либо экземпляру класса, поэтому должен ли статический член быть объявлен как public, private?

Ответы [ 3 ]

8 голосов
/ 07 октября 2011

Независимо от того, объявлять или нет участника публичным или закрытым, не имеет значения, статическое оно или нет. Вы можете иметь статический член как публичный, так и приватный; оба применения приемлемы в зависимости от ситуации.

По сути, если вы хотите или хотите, чтобы компоненты вне класса имели прямой доступ к статическому члену, сделайте его общедоступным. В противном случае сделайте его приватным.

2 голосов
/ 07 октября 2011

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

0 голосов
/ 07 октября 2011

Вы говорите о том, чтобы сделать некоторые статические члены класса приватными для класса, чтобы экземпляры класса не могли получить к ним доступ.К сожалению, я не думаю, что в c ++ есть какой-либо синтаксический механизм, который вы можете использовать для его применения во время компиляции.Возможно, вам удастся выполнить проверку во время выполнения, но это будет, по меньшей мере, запутанно.

Действительно, я не уверен, почему вы захотите сделать то, что вы просите.Если вы уже владеете и редактируете класс, вы также можете редактировать все методы экземпляра, чтобы убедиться, что они не используют статический член.Если вы хотите попытаться применить его, вам нужно будет поместить большой тяжелый комментарий рядом со статическим членом, говорящий «Методы экземпляра не должны использовать это», и убедитесь, что ваша команда это знает.В общем, вам не нужно проявлять религиозность в отношении модификаторов доступа, таких как public / private, чтобы писать хороший код, поэтому я бы просто сказал: не беспокойтесь о попытках применить то, что вы предложили.

Другой объект-ориентированные языки могут обеспечить то, что вы просите, поскольку они проводят больше различий между классами и экземплярами.например, Scala, Smalltalk.

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