Выбор сделать функцию членом, не членом, частным, публичным и т. Д.

Я искал описания различий между функциями-членами и не-членами, и, хотя я все еще в замешательстве, я подумал, что приведу пример, чтобы прояснить для меня кое-что. Вот вопрос из старого теста, который наш инструктор дал нам в качестве учебного материала:

Предположим, у нас есть программа main(), которая использует реализации шаблонов queue2.h и node2.h из нашего текста, создавая очередь букв (очереди букв).

  1. Мы хотим написать оператор потока, чтобы вставить все символы строки (вещи) в очередь (буквы << вещь;).

(б) Должны ли мы сделать это<< членом или не членом? Приватный, публичный, друг или нет?

  1. Мы хотим предоставить инструмент (назовите его Get_Front), который возвращает указатель заголовка этой очереди символов для будущих манипуляций с использованием набора инструментов связанного списка.
    Итак, list_head_insert(head_ptr, '2') поместит '2' в начало моей очереди, когда все закодировано правильно.

(b) Должны ли мы сделать Get_Front участником или не участником? Приватный, публичный, друг или нет?

Я предполагаю, что первый должен быть реализован как не член с функцией друга, но я не уверен в деталях относительно того, почему?

Большое спасибо!

2 ответа

Решение

(б) Должны ли мы сделать это << членом или не членом? Приватный, публичный, друг или нет?

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

Причина: мы хотели вставить в поток очереди, а не во внешний поток, такой как cout. Лучше по возможности использовать функции-члены. Друзья должны использоваться только тогда, когда участники не могут быть использованы.

Get_Front () становится публичной функцией-членом.

Трудно сказать, не знаю истинную цель программы, которую вы описали выше. Я могу дать вам общий ответ.

Сделать функцию

  1. ПУБЛИЧНЫЙ, если вы хотите, чтобы к нему кто-то имел доступ
  2. ЧАСТНЫЕ, если вы хотите, чтобы только функции-члены и друзья этого класса имели доступ.
  3. ЗАЩИЩЕНО, если вы хотите, чтобы к нему были доступны только функции-члены и друзья этого класса, а также функции-члены и друзья производного класса.
  4. ДРУГ, если вы хотите получить доступ к закрытым членам классов.

Что касается членов и не членов, опять же, трудно сказать, не зная подробностей о реализации. Если функция должна иметь доступ к закрытым членам класса, она должна быть функцией-членом.

Другие вопросы по тегам