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

Метод класса - C++

Восстановить пароль Регистрация
 
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
15.04.2011, 15:25     Метод класса #1
Что дает спецификатор const в методе?
C++
1
char *getBuffer() const { return m_buffer; };
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 15:29     Метод класса #2
Даёт возможность вызвать этот метод для константного объекта.
Но данный код не скомпилируется, т.к. пытаешься вернуть константный указатель как неконстантный.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
15.04.2011, 15:53  [ТС]     Метод класса #3
Deviaphan, компилируется, мало того - работает (:
C++
1
2
3
4
5
6
7
8
9
10
11
class DataSpreadSheat
{
protected:
    char *m_buffer;
public:
    char *getBuffer() const;
};
 
char *DataSpreadSheat::getBuffer() const {
    return m_buffer;
};
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 16:06     Метод класса #4
Слишком опасно так делать. Я бы на его месте не работал.)
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:17     Метод класса #5
Deviaphan, outoftime, константные методы всего лишь блокируют изменение переменных внутри метода, поскольку m_buffer тут никак не меняется, всё работает. Данное поведение может быть изменено, если полю класса поставить модификатор mutable, тогда поле класса можно изменять в константном методе, но вот тогда это действительно будет опасно
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 16:21     Метод класса #6
Цитата Сообщение от Ma3a Посмотреть сообщение
но вот тогда это действительно будет опасно
Наоборот.) Если класс меняет своё поле, объект знает, что происходит. А вот когда внутренности отдаются в свободное плавание, это оч опасно.
А я был уверен, что не получится вернуть не константный указатель из константного метода.) У меня даже ни разу рука не поднялась подобный код написать, чтобы убедиться в обратном.) Да и желания не появлялось такого.)))
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:24     Метод класса #7
Цитата Сообщение от Deviaphan Посмотреть сообщение
Если класс меняет своё поле, объект знает, что происходит.
Главное, чтобы программист знал, что происходит А насчет возврата неконстантного указателя эт конечно плохо, не спорю.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 16:28     Метод класса #8
Цитата Сообщение от Ma3a Посмотреть сообщение
Главное, чтобы программист знал, что происходит
Ну, я примерно это и имел в виду.))) Т.е. класс может использовать не только его разработчик. Соответственно и отдавая себя на растерзания куче программистов классу сложно поддерживать себя в актуальном состоянии.)
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
15.04.2011, 16:35  [ТС]     Метод класса #9
Ma3a, мне нужно хранить указатель что-бы запусткать _itoa(), поэтому пришлось поизвращаться (:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 16:39     Метод класса #10
Цитата Сообщение от outoftime Посмотреть сообщение
поэтому пришлось поизвращаться
Что мешает передавать в класс число и вызывать itoa внутри, без извращений?
outoftime
15.04.2011, 16:49  [ТС]
  #11

Не по теме:

Deviaphan, блин, ступил...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 16:58     Метод класса
Еще ссылки по теме:

Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную C++
C++ Как передать в метод класса Menu указатель на метод дочернего класса?
Может ли метод родительского класса обратиться к полю дочернего класса C++

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 16:58     Метод класса #12
И не забудь про возможность перегрузки, чтобы и double передавать если надо.)
Yandex
Объявления
15.04.2011, 16:58     Метод класса
Ответ Создать тему
Опции темы

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