|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.11.2010, 19:54 | #1 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
"Константный класс"
Здравствуйте, уважаемые форумчане!
Надеюсь, что вы поделитесь со мной своими мыслями по поводу следующей проблемы. Имеется класс. Код:
|
20.11.2010, 20:01 | #2 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Это не "все это", а вполне законная часто используемая возможность языка С++ - константные объекты.
Много писать, почитайте тута http://*************/readarticle.php?article_id=2694. В общем, в конструкторе разрешено инициализировать данные-члены класса при создании объекта.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
20.11.2010, 20:19 | #3 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
Естественно, mutable можно использовать для таких целей. Но прошу прощения, забыл важную деталь: хотелось бы, чтобы этот объект был глобальным. И чтобы его можно было использовать исключительно в качестве Rvalue. Вообще я работаю над созданием класса - матрицы, и хотелось бы, в качестве константных, ввести на глобальном уровне нулевую и единичную матрицы.
|
20.11.2010, 20:33 | #4 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Вообще, я намекал на что-то типа:
Код:
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Последний раз редактировалось Syuf; 20.11.2010 в 20:36. |
20.11.2010, 21:12 | #5 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
Спасибо, Syuf! И всё же до этого способа я не мог не додуматься, проблема даже была не совсем в этом Не нравится мне в C++ то, что не обеспечена в нём гибкая работа с инициализацией константных объектов (двоеточие перед "{" конструктора не позволяет реализовать всего), и надеялся на то, что я кое-чего просто не знаю об этом языке.
Рассмотренный случай не очень удачен, поэтому возьму другой: пусть в рамках некоторого класса объявляется константная матрица const AnyClass Osoboya_Matrica Она должна представлять собой такую таблицу 5х5, чтобы каждый её элемент [m][n] был равен m * 5 + n + 1, то есть, выглядеть так: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... 21, 22, 23, 24, 25 Эта матрица часто используется в расчётах, поэтому неплохо бы её сделать константной. В данном случае не целесообразно вставлять в enum класса AnyClass ещё один элемент - osob_matr - мало ли будет существовать классов, которым будут нужны константные экземпляры AnyClass? А если AnyClass и вовсе написан другим программистом и содержится в dll? |
20.11.2010, 21:24 | #6 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Ну, тогда следует пошаманить с конструкторами:
Код:
Где lpfunct указывает на функцию, принимающую столбец и строку и возвращающую элемент, который должен там находиться, т.е.: Код:
Они могут найти другое решение этой задачи. Также моно загробастать конструктор с переменным кол-вом аргументов(если такие существуют), иницилизирующий соответственный элемент соответствующим значением. В общем, много вариантов, и эта неудобность кажущаяся.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Последний раз редактировалось Syuf; 20.11.2010 в 21:28. |
20.11.2010, 21:43 | #7 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
Огромное спасибо! Весьма интересный способ, сам я не являюсь (лся) любителем использовать указатели на функции, теперь отчётливо вижу их полезность. Решение проблемы подходит для многих случаев, (для случая, когда dll уже имеется и подобного конструктора в классе не реализовано, т.е если программист, написавший dll, не знает о целях программиста, использующего эту dll, и они вообще не являются сотрудниками одной фирмы), тем не менее, он весьма универсален, хотя и имеет недостаток - множественный вызов функции, однако вряд ли здесь было можно придумать что-то лучшее
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как обойти "преобразование типа из "string" в "float" невозможно" | lexluter1988 | Помощь студентам | 1 | 07.08.2010 12:23 |
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. | Каравай | Microsoft Office Excel | 13 | 17.02.2010 09:53 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |
Класс "векторные операции" для трехмерных векторов. | Студентка@ | Помощь студентам | 1 | 30.01.2008 19:21 |