Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Явные и неявные члены класса 
:(
    Опции темы
hoz
Дата 24.8.2014, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



 В чём отличие явных и неявных членов классов? И вообще это видимо не тока к членам классов относится, а и к методах вообще?
PM MAIL   Вверх
baldina
Дата 24.8.2014, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



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

PM MAIL   Вверх
hoz
Дата 24.8.2014, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



baldina, читаю я такую информацию:
Цитата

Метод с модификатором const называется постоянным и не может модифицировать неявные члены своего класса

И думаю. Вот тут я и подумал. Если метод с модификатором const, это не означает, что ни один член данного метода не будет изменён в процессе отработки данного метода? Только неявные члены не изменяются, а явные могут быть изменены?
 А у Стивена Прата есть такой момент:
Цитата

Если функция не изменяет объект, то её аргумент следует объявить как const.

Тут говорится, что если функция вообще не изменяет объект. Как это всё уяснить? Хочу чётко понять, когда применять const, в когда нет, и, что в этом случает возможно будет модифицироваться, а что нет.
PM MAIL   Вверх
baldina
Дата 25.8.2014, 10:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



там, куда вы ссылаетесь, под неявным понимается this - да, это член класса, присутствующий всегда и не требующий объявления. к нему применяются такие же правила, как и к остальным членам. главное отличие - this это не просто неявно заданный член, это ключевое слово. 
к константам все это не имеет отношения. фраза там в лучшем случае корявая. у вас есть Прата - вот его и читайте.

про const.
объект может быть константой, тогда его изменить нельзя.
если функция принимает аргумент по ссылке (что распространено для сложных типов - для производительности передается ссылка, а не объект целиком), но не собирается менять объект, ссылку следует объявить константной. это скажет и компилятору и читателю, что аргумент не изменяется.
Код

MyInt operator+ (const MyInt& lhs, const MyInt& rhs);
аналогично, если функция-член класса не меняет состояние объекта, её объявляют константной. в противном случае её нельзя будет применить к константному объекту.
Код

class Vector2d {
 double x, y;
 ...
 double len () const { return sqrt(x*x+y*y); }
};

члена this все это не касается, т.к. он никогда не является lvalue (можете считать, что это константный указатель).

Цитата(hoz @  24.8.2014,  19:24 Найти цитируемый пост)
Метод с модификатором const называется постоянным и не может модифицировать неявные члены своего класса

Метод с модификатором const называется постоянным константным и не может модифицировать неявные переменные члены своего класса объекта, за исключением членов, объявленных как mutable.

вообще, const стоит применять везде, где можно. чем меньше переменных (т.е. изменяемых) объектов в программе, тем проще анализ программы, тем быстрее выявляются ошибки и т.д.

Это сообщение отредактировал(а) baldina - 25.8.2014, 10:59
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.