#c #function #class #constants
#c #функция #класс #константы
Вопрос:
я пытаюсь понять функции получения и установки классов…
Мой вопрос: если я создаю функцию, которая просто получает состояние только из своего класса (функция «getter»), зачем помечать ее как «функцию-член const»? Я имею в виду, зачем использовать функцию-член const, если моя функция предназначена для того, чтобы не изменять никаких свойств своего класса? я не понимаю, пожалуйста:(
например:
int GetValue() {return a_private_variable;}
и
int GetValue() const {return a_private_variable;}
в чем реальная разница?
Ответ №1:
Когда вы объявляете функцию-член как const
, например, в
int GetValue() const;
затем вы сообщаете компилятору, что он ничего не изменит в объекте.
Это также означает, что вы можете вызывать функцию-член для постоянного объекта. Если у вас нет const
модификатора, вы не можете вызвать его для объекта, который был определен как const
. Вы все еще можете вызывать const
функции-члены для непостоянных объектов.
Также обратите внимание, что const
модификатор является частью подписи функции-члена, что означает, что вы можете перегрузить его неконстантной функцией. То есть вы можете иметь
int GetValue() const;
int GetValue();
в том же классе.
Ответ №2:
const
может отображаться в трех разных местах в C .
Пример 1:
const Object obj1;
- obj1 — это
const
объект. Это означает, что вы ничего не можете изменить в этом объекте. Этот объект может вызывать толькоconst
функции-члены, такие как
int GetValue() const {возвращает a_private_variable;}
Пример 2:
int myMethod() const {//do something}
- Это
const
метод. Это была быconst
функция-член, если она объявлена внутри класса. Это типы методов, которыеconst
могут вызывать переменные.
Пример 3:
int myMethod(const Object amp;x) {//do something with x}
- Это метод, который принимает
const
параметр. Это означает, что логике внутриmyMethod
не разрешается изменять что-либо, связанное сx
. Также обратите внимание, что параметр передается по ссылке, а не по копии. Мне нравится думать об этом как о методе, доступном только для чтения.
Когда вы разрабатываете программное обеспечение, которое будут использовать другие; это хорошая идея, чтобы не позволить им ломать то, что они не знают, что они не должны ломать. В этом случае вы можете ограничить переменные, методы и параметры, которые должны быть const
, чтобы гарантировать соблюдение контракта. Я попытался обобщить основные идеи, которые я изучил в колледже, но в Интернете есть много ресурсов const
по C . Проверьте эту ссылку, если хотите узнать больше. Также возможно, что я что-то неправильно запомнил, поскольку я некоторое время не был в области C / C .
Комментарии:
1. Ваш ответ очень подробный, спасибо ^_^
Ответ №3:
Экземпляр const класса может вызывать только функции const.
Наличие экземпляра класса const полезно для повышения стабильности ваших программ, поскольку тогда вы не сможете случайно изменить экземпляр.
В вашем случае функции выполняют точно то же самое, но это не обязательно должно быть так.
Комментарии:
1. Функции-члены, объявленные как
const
, могут вызываться для непостоянных объектов.2. спасибо, я неправильно понял. Ваш ответ намного приятнее моего.