Могут ли быть два открытых раздела в классе? Если да, то почему? И при каких обстоятельствах мы это делаем?

Оператор == всегда предназначен для сравнения ссылок на объекты, тогда как метод сравнения строк .equals () переопределяется для сравнения содержимого:

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)
13
задан dandan78 15 May 2015 в 14:31
поделиться

6 ответов

Квалификаторы доступа просто применяются к коду, который следует до следующего квалификатора. Нет никаких ограничений на количество или порядок таких квалификаторов.

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

27
ответ дан 1 December 2019 в 17:37
поделиться

Как объясняется в ответе @Marcelo Cantos , это разрешено. При написании кода самостоятельно вы должны избегать этого, поскольку это приведет к путанице только тогда, когда другие читают ваш код. Единственное место, где я когда-либо видел это в реальной жизни, - это код, сгенерированный различными мастерами MFC. Всякий раз, когда вы добавляете что-то в свой класс с помощью мастера, он просто добавляет дополнительный раздел в конец вашего класса.

2
ответ дан 1 December 2019 в 17:37
поделиться

Как говорит Марсело, вы можете использовать классификаторы public, private и protected столько раз, сколько захотите. «Когда» полностью личное. Некоторым людям нравится это:

class AClass
{
public:
   // all the public stuff
protected:
   // all the protected stuff
private:
   // all the private stuff
};

но лично (и это на самом деле просто личное предпочтение) мне нравится делать следующее:

class AClass
{
   // constructors and destructors
public:
   // public cons/dest
protected:
   // protected cons/dest
private:
   // private cons/dest

   // accessors
public:
protected:
private:

   // methods
public:
protected:
private:

   // members
public:
protected:
private:
};

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

11
ответ дан 1 December 2019 в 17:37
поделиться

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

Обычно это: общедоступный / защищенный / частный , в таком порядке, потому что это упрощает жизнь читателям.

  • Люди, которые используют этот класс, могут прекратить чтение, когда достигнут тега protected , все, что будет после этого, их не касается.
  • Люди, унаследованные от класса, могут прекратить чтение, достигнув закрытого тега , все, что находится после него, - это детали реализации.

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

Однако есть несколько уловок:

  • при использовании программирования метатемплейтов вам может потребоваться сначала объявить типы, а затем методы, так что вы получите 2 серии public / protected / private
  • , когда используя идиому Key (вместо friend ), у вас есть общедоступный раздел , который на самом деле предназначен только для небольшой части пользователей и лучше всего изолирован либо внизу обычного раздела public , либо после раздела protected .

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

3
ответ дан 1 December 2019 в 17:37
поделиться

Да, это правильно, но лично я предпочитаю иметь только одну общедоступную секцию в верхней части класса, на которую программисты обращают внимание в первую очередь при изучении нового класса. Тогда легче увидеть, какие части должны быть доступны, а какие нет, вместо того, чтобы просматривать весь заголовок класса.

6
ответ дан 1 December 2019 в 17:37
поделиться

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

2
ответ дан 1 December 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: