Зачем использовать функцию-член const?

#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. спасибо, я неправильно понял. Ваш ответ намного приятнее моего.