#c
#c
Вопрос:
У меня есть класс camera, который устанавливает две переменные — проекцию и матрицу представления. Я мог бы либо создать эти extern и включить заголовок во все, что я хотел иметь доступ к переменным, либо я мог бы создать для них getter / передать ссылки для этих переменных всему, что в них нуждается. Это просто случай предпочтения или есть реальные преимущества в том, чтобы делать это определенным образом?
Комментарии:
1. Под extern вы подразумеваете public, вы действительно написали класс для управления двумя глобальными переменными?
Ответ №1:
Преимущество getter заключается в том, что он не позволяет внешнему коду записывать в вашу переменную (например, массив указателей нельзя увеличить).
В остальном это функционально то же самое, особенно если это для вашего собственного использования.
Комментарии:
1. о, хорошо, потрясающе, спасибо. И я прав, думая, что даже если что-то внешнее, вам все равно нужно на самом деле #включить файл, в котором он находится, чтобы правильно его использовать?
2. Да, другие файлы должны знать, что переменные существуют. Вам нужно объявить переменные как
extern
в вашем заголовке, так и в качестве обычных переменных (без extern), где вы хотите реализовать эту переменную.
Ответ №2:
Это скорее вопрос инкапсуляции. Если ваш класс camera является единственным владельцем этих двух матриц, было бы разумно сделать их доступными через геттеры, а не с общедоступными атрибутами.
Это, например, позволит вам подклассировать вашу камеру и создавать другие методы для ваших матриц просмотра и проекции.