Выбор сделать функцию членом, не членом, частным, публичным и т. Д.
Я искал описания различий между функциями-членами и не-членами, и, хотя я все еще в замешательстве, я подумал, что приведу пример, чтобы прояснить для меня кое-что. Вот вопрос из старого теста, который наш инструктор дал нам в качестве учебного материала:
Предположим, у нас есть программа main(), которая использует реализации шаблонов queue2.h и node2.h из нашего текста, создавая очередь букв (очереди букв).
- Мы хотим написать оператор потока, чтобы вставить все символы строки (вещи) в очередь (буквы << вещь;).
(б) Должны ли мы сделать это<< членом или не членом? Приватный, публичный, друг или нет?
- Мы хотим предоставить инструмент (назовите его Get_Front), который возвращает указатель заголовка этой очереди символов для будущих манипуляций с использованием набора инструментов связанного списка.
Итак, list_head_insert(head_ptr, '2') поместит '2' в начало моей очереди, когда все закодировано правильно.
(b) Должны ли мы сделать Get_Front участником или не участником? Приватный, публичный, друг или нет?
Я предполагаю, что первый должен быть реализован как не член с функцией друга, но я не уверен в деталях относительно того, почему?
Большое спасибо!
2 ответа
(б) Должны ли мы сделать это << членом или не членом? Приватный, публичный, друг или нет?
Член, публичный. Вы создаете объект очереди и оператор вставки перегрузки в качестве функции-члена. Может использоваться для вставки символов в очередь.
Причина: мы хотели вставить в поток очереди, а не во внешний поток, такой как cout. Лучше по возможности использовать функции-члены. Друзья должны использоваться только тогда, когда участники не могут быть использованы.
Get_Front () становится публичной функцией-членом.
Трудно сказать, не знаю истинную цель программы, которую вы описали выше. Я могу дать вам общий ответ.
Сделать функцию
- ПУБЛИЧНЫЙ, если вы хотите, чтобы к нему кто-то имел доступ
- ЧАСТНЫЕ, если вы хотите, чтобы только функции-члены и друзья этого класса имели доступ.
- ЗАЩИЩЕНО, если вы хотите, чтобы к нему были доступны только функции-члены и друзья этого класса, а также функции-члены и друзья производного класса.
- ДРУГ, если вы хотите получить доступ к закрытым членам классов.
Что касается членов и не членов, опять же, трудно сказать, не зная подробностей о реализации. Если функция должна иметь доступ к закрытым членам класса, она должна быть функцией-членом.