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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
Helldrg
26 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,107
#1

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

08.01.2013, 19:19. Просмотров 3895. Ответов 9
Метки нет (Все метки)

Здравствуйте! Объясните, пожалуйста, что делает тут const:
C++
1
2
3
4
double GetFrequency () const
{
          return m_frequency;
}
(Этот кусок взят из класса и можно ли так писать вне класса?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2013, 19:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Const после функции (C++):

Const после функции - C++
Можно ли сказать что такая запись: void F(int a, int b)const заменяет эту: void F(const int a, const int b) ...

Ключевое слово const после декларации функции в классе - C++
Здравствуйте, у меня есть подобный класс-шаблон: template <typename Type> class Array { private: Type* ptr; // ...

Что означает const после круглых скобок функции - C++
всем привет. скажите, а что здесь значит const? int func(int var) const { return get; }

Модификатор const для параметра функции не const? - C++
void foo(const int N) { int Arr; //<-- ??? } В clang это работает. В VisualStudio 2015 нет.

const& и const* в имени функции - C++
Объясните пожалуйста что значит const& и const* в имени и параметрах функции(пример из Вандевурд,Джосаттис): template <typename T> ...

int const * const foo(const int* param) const - разъясните значение квалификаторов - C++
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...

9
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
08.01.2013, 19:31 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В константных методах нельзя модифицировать значения членов класса. Указатель this в этих методах имеет тип const classname * const, вместо classname * const.

Для обычных функций он не применяется.
3
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.01.2013, 20:14 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
[занудство]
Цитата Сообщение от Schizorb Посмотреть сообщение
В константных методах нельзя модифицировать значения членов класса.
Кроме тех, что объявлены как mutable.
[/занудство]
3
Helldrg
26 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,107
08.01.2013, 20:31  [ТС] #4
Значит я не с могу в методе менять значения переменных, заданных в классе, спасибо большое!
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
08.01.2013, 21:02 #5
Так же только такие методы можно вызывать для константных объектов.
0
pety
1 / 1 / 0
Регистрация: 11.12.2014
Сообщений: 116
29.03.2015, 16:01 #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;
0
DrOffset
7349 / 4449 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
30.03.2015, 13:18 #7
Цитата Сообщение от pety Посмотреть сообщение
дружественные функции так объявлять надо?
Если дружественные функции - это свободные функции, то нет, const после них не нужно ставить. const после функции применим только к методам класса.
0
pety
1 / 1 / 0
Регистрация: 11.12.2014
Сообщений: 116
30.03.2015, 15:29 #8
Получается такую функцию нельзя вызвать для константного объекта?
0
hoggy
6672 / 2856 / 491
Регистрация: 15.11.2014
Сообщений: 6,364
Завершенные тесты: 1
30.03.2015, 15:36 #9
Цитата Сообщение от pety Посмотреть сообщение
Получается такую функцию нельзя вызвать для константного объекта?
нет, получается, что вы так и не поняли в чем суть константных функций-членов.

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

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

и к состоянию объектов класса они не имеют никакого отношения вообще.
1
pety
1 / 1 / 0
Регистрация: 11.12.2014
Сообщений: 116
30.03.2015, 15:57 #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 минут
ясно
0
30.03.2015, 15:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 15:57
Привет! Вот еще темы с ответами:

Для чего const после phone() - C++
const char* phone()const {return phone_;} Для чего const после phone()?

Ключевое слово const после ключевого слова new - C++
Наткнулся на такую запись const int* ciq = new const int (3); Какую роль играет const после new?

Применение const в функции - C++
Подскажите как защитить массив от изменения в функции. #include &lt;iostream&gt; using namespace std; double igor(double mass,int...

const char *[] в функции - C++
Прототип функции такой void deal(const int , const char *, const char *); А вот сама функция void deal(const int wDeck, const char...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru