Форум программистов, компьютерный форум CyberForum.ru

Const после функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,077
08.01.2013, 19:19     Const после функции #1
Здравствуйте! Объясните, пожалуйста, что делает тут const:
C++
1
2
3
4
double GetFrequency () const
{
          return m_frequency;
}
(Этот кусок взят из класса и можно ли так писать вне класса?)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
08.01.2013, 19:31     Const после функции #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В константных методах нельзя модифицировать значения членов класса. Указатель this в этих методах имеет тип const classname * const, вместо classname * const.

Для обычных функций он не применяется.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.01.2013, 20:14     Const после функции #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
[занудство]
Цитата Сообщение от Schizorb Посмотреть сообщение
В константных методах нельзя модифицировать значения членов класса.
Кроме тех, что объявлены как mutable.
[/занудство]
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,077
08.01.2013, 20:31  [ТС]     Const после функции #4
Значит я не с могу в методе менять значения переменных, заданных в классе, спасибо большое!
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
08.01.2013, 21:02     Const после функции #5
Так же только такие методы можно вызывать для константных объектов.
pety
1 / 1 / 0
Регистрация: 11.12.2014
Сообщений: 116
29.03.2015, 16:01     Const после функции #6
дружественные функции так объявлять надо?
например
C++
1
2
3
4
5
friend std::ostream& operator<< (const std::ostream& ost, const verylong& x);
 
// или
 
friend std::ostream& operator<< (const std::ostream& ost, const verylong& x) const;
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
30.03.2015, 13:18     Const после функции #7
Цитата Сообщение от pety Посмотреть сообщение
дружественные функции так объявлять надо?
Если дружественные функции - это свободные функции, то нет, const после них не нужно ставить. const после функции применим только к методам класса.
pety
1 / 1 / 0
Регистрация: 11.12.2014
Сообщений: 116
30.03.2015, 15:29     Const после функции #8
Получается такую функцию нельзя вызвать для константного объекта?
hoggy
5225 / 2116 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
30.03.2015, 15:36     Const после функции #9
Цитата Сообщение от pety Посмотреть сообщение
Получается такую функцию нельзя вызвать для константного объекта?
нет, получается, что вы так и не поняли в чем суть константных функций-членов.

дружественная функция не является членом класса (даже если объявлена в нем).
это - обычная свободная функция.

а обычные свободные функции можно вызывать когда захотите.

и к состоянию объектов класса они не имеют никакого отношения вообще.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 15:57     Const после функции
Еще ссылки по теме:

C++ const& и const* в имени функции
C++ int const * const foo(const int* param) const - разъясните значение квалификаторов
Const после функции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
pety
1 / 1 / 0
Регистрация: 11.12.2014
Сообщений: 116
30.03.2015, 15:57     Const после функции #10
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Class
{ 
     public:
     // ...
 
     friend std::ostream& operator<< (const std::ostream& ost, const verylong& x) {
          // Реализация не изменяет объект
     }
};
 
const Class cl;
 
cout << cl;  // Так можно?
Добавлено через 18 минут
ясно
Yandex
Объявления
30.03.2015, 15:57     Const после функции
Ответ Создать тему
Опции темы

Текущее время: 23:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru