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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> const & static 
:(
    Опции темы
Romikgy
Дата 6.9.2005, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Дрон
А во втором что будет менять???
Добавлено @ 14:23
Цитата(sergej @ 6.9.2005, 14:20)
tst2.const_func(); //А эту даст.

А смысл в ней если компилятор не даст?????????


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
sergejzr
Дата 6.9.2005, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Цитата(Romikgy @ 6.9.2005, 13:20)
А во втором что будет менять???

Ничего. Ведь это не функция класса. В теле этой функции будет однако возможно например распечатать переменные (ведь их не надо при этом изменять).

Цитата(Romikgy @ 6.9.2005, 13:20)
А смысл в ней если компилятор не даст?????????


Смысл, как и в других защитных механизмах (например private) в том, чтобы не дать выстрелить себе в ногу smile.

Например возьмём обьект

Супер_важный_контракт

Код

class Контракт
{
  char* подпись;
  char* имя;
  char * адрес;
 int сумма;
  
Контракт(имя, подпись, адрес, сумма)
void распечатать() const;
void положить_в_конверт() const;

void подписать(новая_подпись);//эта функция меняет поля и смысла делать её const нет.
void изменить_сумму(новая сумма);//эта функция меняет поля и смысла делать её const нет.
}  

int main()
{
Контракт обр;//обрабатываемый контракт
const Контракт Супер_важный_контракт(Вася, Я, Камчатка, 10000);//Теперь этот контракт больше никогда не изменить.
Супер_важный_контракт.изменить_сумму(0);//фигушки :) копмилер не даст
Супер_важный_контракт.распечатать();//пожалуйста :)
}



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Romikgy
Дата 6.9.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Интересно... общий смысл стал понятен,
только зачем такие сложности не пойму , ну да ладно smile
Еще раз благодарен всем ответившим smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
sergejzr
Дата 6.9.2005, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Цитата(Romikgy @ 6.9.2005, 13:51)
только зачем такие сложности не пойму

Просто если ты два месяца не видел свою программу, ты сам фиг разберёшься, где у тебя что меняется, а где нет.
Поэтому простое правило. Пиши как можно больше const. Везде, даже по умолчанию. Убирай их, только если не менять ну совсем нельзя.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Vyacheslav
Дата 7.9.2005, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

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



Цитата(sergej @ 6.9.2005, 14:20)
Так не бывает. const бывает только функция обьекта и говорит о том, что в этой функции его поля не будут изменены т.е


Ну если уж быть совсем точным, то в констатном методе нельзя изменить только те поля класса, которые не имеют спецификатора mutable.
Код

class Alpha {
   mutable int count;
   mutable const int* iptr;
public:
   int func1(int i = 0) const { // Promises not to change const arguments.
      count = ++i;  // But count can be changed.
      iptr = &i;
      cout << *iptr << endl;
      return count;
      }
};





--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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