Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 02.09.2009
Сообщений: 7

Классы

04.09.2009, 09:40. Показов 1446. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Итак, вопрос: как вернуть название объекта?

Предположим, есть класс

C++
1
2
3
4
class ship
{
...
};
Далее создаём объект

C++
1
ship Zed;
как создать, скажем свой битмап для каждого объекта, прописанного в классе? Думал через

C++
1
2
3
Graphics::TBitmap *"Имя объекта + bitmap"  = new Graphics::TBitmap();
 
"Имя объекта + bitmap"->LoadFromFile("имя.bmp");
Но столкнулся с проблемой названий.

Хотелось - бы , в идеале, указывать путь через класс, для упрощённой работы, вида

C++
1
Zed.bitmap="имя.bmp";
Но не знаю как...

Думаю, говорить что я новичок не обязательно, но всё же, сильно не пинайте.

P.S.

Если мыслю вообще не в том направлении, наставьте на путь истинный.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.09.2009, 09:40
Ответы с готовыми решениями:

Классы
Нужно сделать иерархию из основных деталей которые используютcя в электронике Используя при этом классы Всего 5 элементов, на каждый...

Классы
Разработать класс на С++ , набор методов (конструктор, деструктор и указаны методы) для программной модели заданного объекта. Описание...

Классы
Необходимо разработать программу классов больных. Параметры фамилия и возраст. Может есть у кого пример реализации классов на билдере? ...

12
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
04.09.2009, 11:02
"Название объекта" это всего лишь типизированная ссылка на область памяти, на один и тот же объект может ссылаться сколько угодно указателей. Самое лучшее, с моей точки зрения, создать в классе поле, которое будет обозначать название конкретного объекта. При создании объекта это поле заполняется нужными данными и в дальнейшем используется.
1
125 / 116 / 17
Регистрация: 27.02.2007
Сообщений: 291
04.09.2009, 11:05
Пусть будет в классе
C++
1
2
3
4
5
6
7
class ship
{
---------
  Graphics::TBitmap *bmp;
  String name_bmp;
--------
};
Инициируем класс:
C++
1
2
3
4
ship sh;
sh.name_bmp = "имя.bmp";
sh.bmp = new Graphics::TBitmap();
sh.bmp->LoadFromFile(sh.name_bmp);
Как-то вот так...
1
 Аватар для Airhand
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
04.09.2009, 12:31
В классе члены приватные по-умолчанию. Поэтому надо писать public:
C++
1
2
3
4
5
6
class ship
{
public:
  Graphics::TBitmap *bmp
...
}
Далее, в конструкторе иницыируем его. Не забыть в деструкторе убрать битмап. Поскольку, битмап - динамический, в классе нужно создать ещё операторы копирования и присваивания.
1
125 / 116 / 17
Регистрация: 27.02.2007
Сообщений: 291
04.09.2009, 12:47
Airhand, Абсолютно с Вами согласен! Простите, что не уточнил
0
1 / 1 / 0
Регистрация: 02.09.2009
Сообщений: 7
04.09.2009, 21:46  [ТС]
Попробовал так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ship
{
 public:
  Graphics::TBitmap *bmp;
  void pic(UnicodeString bmp_path);
};
 
void ship::pic(UnicodeString bmp_path)
{
 ship::bmp->LoadFromFile(bmp_path);
}
 
ship black;
black.pic("C:\plane.bmp");
Canvas->Draw(20,20,black.bmp);
Ругается на 10-ю строку. Похоже, я что-то не так делаю...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
04.09.2009, 21:54
C++
1
2
3
4
void ship::pic(UnicodeString bmp_path)
{
bmp->LoadFromFile(bmp_path);
}
Вот только будет эксепшн, так как ты не выделяешь память под рисунок.
Было бы хорошо определить конструктор и деструктор:
C++
1
2
3
4
5
6
7
8
9
10
11
class ship
{
 public:
  Graphics::TBitmap *bmp;
  ship(){bmp=new Graphics::TBitmap();}
  ~ship()
          {
           if(bmp!=NULL)delete bmp;
           }
  void pic(UnicodeString bmp_path);
};
Добавлено через 1 минуту
Кстати. Когда пишешь на форум:
Цитата Сообщение от DARKDOOM Посмотреть сообщение
Ругается на 10-ю строку
Копируй сюда также то, какими именно словами он ругается.
1
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
04.09.2009, 21:55
DARKDOOM,
Ругается на 10-ю строку. Похоже, я что-то не так делаю...
Случай конечно тяжелый, но медицина помочь в состоянии.
необходимо срочно записаться на приём к доктору, желательно сразу к нескольким: Шилдт, Липман, Страуструп etc...

ship::bmp->LoadFromFile(bmp_path);

помимо того, что переменная bmp не проинициализирована и во время работы программы произойдет попытка выполнения случайного участка памяти, так ещё запись вида ship::bmp означает обращение к статической переменной, коей в данном случае не наблюдается.
1
125 / 116 / 17
Регистрация: 27.02.2007
Сообщений: 291
04.09.2009, 21:59
Цитата Сообщение от DARKDOOM Посмотреть сообщение
C++
1
black.pic("C:\plane.bmp");
Не забывай, в С++ ставится двойной слеш. Вот так:
C++
1
black.pic("C:\\plane.bmp");
1
1 / 1 / 0
Регистрация: 02.09.2009
Сообщений: 7
04.09.2009, 22:10  [ТС]
Извиняюсь
До этого было 10-я строка

Code
1
First chance exception at $7C812AEB. Exception class EAccessViolation with message 'Access violation at address 00401AFF in module 'Project1.exe'. Read of address 00000000'. Process Project1.exe (2528)
С переписаном вами, Otaka, классом, ругань такая
Code
1
2
[ILINK32 Error] Error: Unresolved external 'ship::pic(System::UnicodeString)' referenced from D:\DOCS\RAD STUDIO\PROJECTS\CLASSES\DEBUG\UNIT1.OBJ
[ILINK32 Error] Error: Unable to perform link
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
04.09.2009, 22:17
Вот видишь. Все стало гораздо понятнее. У тебя был ексепшн, так как ты не делал new.
А, я ведь только кусок привел, чтобы ты поменял.
Так ругаться будет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class ship
{
 public:
  Graphics::TBitmap *bmp;
  ship(){bmp=new Graphics::TBitmap();}
  ~ship()
          {
           if(bmp!=NULL)delete bmp;
           }
  void pic(UnicodeString bmp_path)
          {
          bmp->LoadFromFile(bmp_path);
          }
};
1
1 / 1 / 0
Регистрация: 02.09.2009
Сообщений: 7
04.09.2009, 22:52  [ТС]
Спасибо, всё работает!

Теперь хоть понял основную структуру класса, а также увидел реальный пример деструктора и зачем его делать. Ещё один шаг в усвоении.
Приятно, когда люди адекватно реагируют на человека со скудными знаниями в их профессиональной сфере. Авось, через пару лет упорного труда и я к вам примкну(всмысле к программистам).

Спасибо всем кто отписался и поделился собственным мнением и профессиональным советом!
0
 Аватар для Airhand
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
05.09.2009, 12:26
Цитата Сообщение от Rififi Посмотреть сообщение
так ещё запись вида ship::bmp означает обращение к статической переменной, коей в данном случае не наблюдается.
Запись вида ship::bmp означает обращенме к классу ship к переменной bmp. Это тебе надо почить Страуструпа, чтобы не писать такую чущь. :: - это спецификатор области видимости, а не указатель на то, что это статическая переменная. Как ты тогда оценишь ::Sleep(10); ? Какая статическая переменная ? Это же функция. А эта запись означет, что мы берем внешнюю по отношению к нашей области функцию, чтобы не вызвать переопределённую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2009, 12:26
Помогаю со студенческими работами здесь

классы
Здравствуйте! Помогите, пожалуйста, написать задачу на С++ по классам. Вот текст: Класс «Человек» Поля: имя, рост, вес Метод:...

Классы
Прижало тут задачку сделать, а я чет туплю, ни как не получается.М.б. поможете? Создайте класс с именем Complex, позволяющий...

классы
Помогите, пожалуйста, написать прогу с помощью классов... к примеру? на сумму всех эелементов матрицы...visual 2008 Добавлено через...

Классы
Совсем не разбираюсь в классах, а нужно прогу сдать. 1. Описать класс Points, затем производный от него Circle. Создать динамический...

Классы и их свойства
Создадим приложение, которое взаимодействует с иерархией классов: TAnimal (базовый класс) и THuman, TDog, TCat (дочерние классы)....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru