Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 04.01.2012, 23:02   #1
Phoenixx
 
Регистрация: 29.12.2011
Сообщений: 6
По умолчанию Динамический класс. С++

Доброго времени суток.
Нужно создать динамический класс для работы с массивами. Вопрос как его создать?
В книгах Дейтела и Лафоре вопрос создания динамического класса не освещается. В инете, толком, информации не нашел. Буду рад любой помощи по этому вопросу.
Phoenixx вне форума
Старый 04.01.2012, 23:04   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://programmersforum.ru/showthread.php?t=34061
_Bers вне форума
Старый 05.01.2012, 03:24   #3
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

А что такое динамический класс?

Я нашёл пока такое определение:
Цитата:
Динамический класс - класс, способный порождать объекты (экземпляры или точные копии), Динамические классы могут содержать как статические, так и динамические предикаты, а также статические и динамические факты. Каждый экземпляр динамического класса содержит свою копию динамического предиката и свою копию динамического раздела фактов. Создание объекта (экземпляра или копии класса) осуществляется вызовом предиката-конструктора. Как правило, это предикат-функция new(), но может быть и любой другой, объявленный как конструктор в разделе constructors декларации класса.
Это в смысле обычный класс? (не статический). Или что-то другое имеется в виду? Мне так, для общего развития, не слышал раньше такой термин :]
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума
Старый 05.01.2012, 08:53   #4
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Ну бывает при объявлении
Код:
static class BlaBlaBla
{
...
}
а бывает
Код:
class BlaBlaBla
{
...
}
Вот вроде бы и вся разница, если я понимаю. Ну и соответственно ваше определение тоже сюда подходит. Получается что нельзя создавать объекты статического класса)
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума
Старый 05.01.2012, 09:55   #5
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Ну бывает при объявлении
Код:
static class BlaBlaBla
{
...
}
Вы это сами придумали?

Что подразумевает ТС под "динамическим классом" остается загадкой
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума
Старый 05.01.2012, 11:59   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от sVasilich Посмотреть сообщение
А что такое динамический класс?

Я нашёл пока такое определение:

Это в смысле обычный класс? (не статический). Или что-то другое имеется в виду? Мне так, для общего развития, не слышал раньше такой термин :]
На с++ все классы без исключения статические
Потому что сам по себе язык с++ является языком строгой статической типизации

Поэтому, на с++ в чистом виде отсутствует рефлексия, и поэтому недоступны динамические классы.

Динамический класс - это класс, у которого в рантайме можно изменять реализацию (добавлять/убавлять данные члены или данные-методы)


Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Ну бывает при объявлении
Код:
static class BlaBlaBla
{
...
}
а бывает
Код:
class BlaBlaBla
{
...
}
Вот вроде бы и вся разница, если я понимаю.
Плохо понимаете. Ключевое слово static - это класс памяти имени объекта.

На языке с++ применительно к классам оно имеет такое же значение, как применительно к функциям, переменным, или экземплярам классов.

А именно: ограничивает видимость объекта (применительно к классу, объектом является исполняемый байт код методов класса) единицей трансляции. Что означает, что для static class каждая использующая его единица трансляции получит собственную копию исполняемого байт кода методов класса.

Никакого отношения к "динамическим" классам этот класс памяти не имеет.

/ps скорее всего ТС имел ввиду, что ему нужен обычный класс, реализующий работу с дин. массивами. Что-то типа вектора.
_Bers вне форума
Старый 05.01.2012, 13:30   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
байт кода
?
Цитата:
ограничивает видимость объекта (применительно к классу, объектом является исполняемый байт код методов класса) единицей трансляции.
и
Цитата:
Что означает, что для static class каждая использующая его единица трансляции получит собственную копию исполняемого байт кода методов класса.
как связаны то?
ограничение видимости это одно, а генерация лишнего кода вообще другое, и статик никогда этого не делал.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 05.01.2012, 13:42   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
?икак связаны то?
ограничение видимости это одно, а генерация лишнего кода вообще другое, и статик никогда этого не делал.
в качестве примера:

1. Создаём хэдер, в котором пишем функцию (реализацию, а не прототип)

2. Создаём две ед. трансляции, и инклюдим наш хэдэр в оба cpp

3. Компилируем.

4. Ошибка линкера. О боже! Тело функции уже определено! Что делать?

Можно поставить ключик линкеру /force
http://msdn.microsoft.com/en-us/library/70abkas3.aspx

Можно сделать функцию статиком. Каждая единица трансляции получит собственную копию функции (именно исполняемого байт кода). Ругани о переопределении символа не будет.

5. С классами, переменными и тд - аналогично. Единица трансляции может изменить значение своей копии статик объекта. И это изменение не затронет объекты других ед. трансляции.


/ps "лишний код" реально компилируется на этапе компиляции единиц трансляции. Но в целевой проект не входит. Потому что весь "лишний код" просто выбрасывается линкером, как и весь остальной неиспользованный хлам. Поэтому, конечно можно сказать, что по итогу все равно только одна версия туловища статик функции останется. Но "с точки зрения" единицы трансляции - она оперирует своей собственной копией функции.

Последний раз редактировалось _Bers; 05.01.2012 в 13:53.
_Bers вне форума
Старый 05.01.2012, 13:55   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Можно сделать функцию статиком. Каждая единица трансляции получит собственную копию функции (именно исполняемого байт кода). Ругани о переопределении символа не будет.
а не проще сказать что статик функция/класс не будут экспортированы из единиц трансляции?
и в итоге можно создать копию данных(хотя не вижу смысла, искл скрытие чего-то внутри модуля)

и не байт-кода, С++ не Java/C#.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось MaTBeu; 05.01.2012 в 18:34.
Пепел Феникса вне форума
Старый 05.01.2012, 14:02   #10
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а просто не сказать что статик функция/класс не будут экспортированы из единиц трансляции?
и в итоге можно создать копию данных(хотя не вижу смысла, искл скрытие чего-то внутри модуля)

и не байт-кода, С++ не Java/C#.
Я не понял этого сообщения...
_Bers вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс "динамический список" МаргаритKа Помощь студентам 0 23.05.2011 01:08
Динамический массив tony_vies Помощь студентам 0 20.02.2011 21:18
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Динамический массив - или всё таки не динамический? vedro-compota Общие вопросы C/C++ 30 10.12.2010 23:22
создать динамический Стек через класс шаблон Petruha-nsk Общие вопросы C/C++ 1 08.11.2009 12:41