разница между использованием extern и использованием getter?

#c

#c

Вопрос:

У меня есть класс camera, который устанавливает две переменные — проекцию и матрицу представления. Я мог бы либо создать эти extern и включить заголовок во все, что я хотел иметь доступ к переменным, либо я мог бы создать для них getter / передать ссылки для этих переменных всему, что в них нуждается. Это просто случай предпочтения или есть реальные преимущества в том, чтобы делать это определенным образом?

Комментарии:

1. Под extern вы подразумеваете public, вы действительно написали класс для управления двумя глобальными переменными?

Ответ №1:

Преимущество getter заключается в том, что он не позволяет внешнему коду записывать в вашу переменную (например, массив указателей нельзя увеличить).

В остальном это функционально то же самое, особенно если это для вашего собственного использования.

Комментарии:

1. о, хорошо, потрясающе, спасибо. И я прав, думая, что даже если что-то внешнее, вам все равно нужно на самом деле #включить файл, в котором он находится, чтобы правильно его использовать?

2. Да, другие файлы должны знать, что переменные существуют. Вам нужно объявить переменные как extern в вашем заголовке, так и в качестве обычных переменных (без extern), где вы хотите реализовать эту переменную.

Ответ №2:

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

Это, например, позволит вам подклассировать вашу камеру и создавать другие методы для ваших матриц просмотра и проекции.