Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пользовательские классы 
:(
    Опции темы
GLOOM
Дата 28.1.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.1.2006

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



Вопрос такой как,куда добавлять собственные классы в форме чтоб потом ими пользоваться в bcb 6
PM MAIL   Вверх
Artemon
Дата 28.1.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Во-первых: добавлять каждый класс нужно в отдельном файле (а лучше в двух)

Во-вторых:
Включать созданные файлы директивой #include "Имя файла"

Втретьих :
Создавать объект нужного тебе класаа.


А потом пользуйся сколько хочешь.




--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
GLOOM
Дата 29.1.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.1.2006

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



Сделал файл ".h" с классом
class Planet
{
public:
int a;
};

добавил его в Unit.cpp
создал экземпляр Planet* P
в обработчике кнопки написал
P->a = 1;

а мне выдают project raised exception class EAccessViolation with message "Access Violation at address 00401cc8 in modul "....exe" . Write of address 00000000.
PM MAIL   Вверх
BreakPointMAN
Дата 29.1.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 6
Всего: 24



GLOOM, а как ты "создал экземпляр Planet* P" и где ты это сделал?


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
DeadSoul
Дата 29.1.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: нет
Всего: 11



Цитата(GLOOM @ 29.1.2006, 14:06 Найти цитируемый пост)

создал экземпляр Planet* P

GLOOM, ты создал не класс, а указатель на класс


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
GLOOM
Дата 29.1.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.1.2006

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



Первое не понял что значит "ты создал не класс" если он у меня объявлен в ".h" и объясните как тогда создавать классы.

Второе у меня проект в нём форма в исходнике формы и создавал экземпляр простым объявлением а при нажатии кнопки на форме, менялось значение "а" у экземпляра класса.

третье не понял реплики
Цитата

GLOOM, ты создал не класс, а указатель на класс

извините я наверное выгляжу идиотом, но не объясните по подробнее

PM MAIL   Вверх
Artemon
Дата 29.1.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



GLOOM, ты все верно сделал, только в конструкторе формы добавь строку

Цитата

Planet = new P;





--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
mr.Anderson
Дата 29.1.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Как тут объяснишь? smile Вы создали УКАЗАТЕЛЬ на объект класса Planet, а не сам объект. Чтобы было нормально, вместо вашей строчки впишите
Код

Planet OBJECT;

А потом уже работайте с объектом. Если не понятна разница - объясняю: надо убрать звездочку перед именем объекта. Надеюсь, понятно объяснил.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Artemon
Дата 29.1.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Если интересно про указатели - то прочитай любую книгу по C


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
mr.Anderson
Дата 29.1.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Artemon, да зачем так париться! Видно же, что человек не разбирается пока в том, что такое указатели и с чем их едят, как и я, впрочем. Так что зачем вообще маяться с указателями? Убрал звездочку и все станет ОК!
Добавлено @ 15:19
Artemon, прочитать мало иногда бывает. smile По себе знаю.
Добавлено @ 15:22
GLOOM, чтобы было уж совсем понятно, давайте свой пример приведу.

В файле, предположим, myclass.h, пишем следующее:
Код

class MyClass
{
 public: void MyFunc(void);
};

void MyClass::MyFunc(void)
{
 printf("\nThis is method of my class!");
}

Усе! Теперь в основном файле программы пишем:
Код

#include "myclass.h"
//-------------------------------------
void main(void)
{
 MyClass MyObject1;
 MyObject1->MyFunc();
}

И все будет полный чпок! Понятно теперь? Я постарался максимально просто и понятно сделать.
Добавлено @ 15:24
GLOOM, и не забудьте плиз отписаться, поняли аль нет. Если еще вопросы, давайте их сюда. smile Мне ж тоже интересно, помогли ли вам мои объяснения или объяснения других людей.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
GLOOM
Дата 29.1.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.1.2006

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



первое я отлично понимаю разницу между объектом и указателем на него , даже более того я отлично понимаю разницу между ссылкой на объект и самим объектом.

Второе
Цитата

Вы создали УКАЗАТЕЛЬ на объект класса

Нааада же , а я то уже подумал что я создаю
Цитата

указатель на класс


Кстати кто-нибудь объяснит мне что такое указатель на класс?

sim7 хорошо оказывается разбираешся в указателях
сможешь сам найти ошибку в своём коде без помощи debuger'a

artemon
А почему нельзя просто написать
Planet* P; а нужно так
Planet* P = new Planet;
PM MAIL   Вверх
mr.Anderson
Дата 29.1.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Цитата

Видно же, что человек не разбирается пока в том, что такое указатели и с чем их едят, как и я, впрочем

Пропустили эти слова, да? А я ж написал их, и они ясно говорят, что я тоже в указателях не разбираюсь.
Ладно. Хотел помочь, а получилось наоборот. Отлично...


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
BreakPointMAN
Дата 29.1.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 6
Всего: 24



Цитата(GLOOM @ 29.1.2006, 17:08 Найти цитируемый пост)

А почему нельзя просто написать
Planet* P; а нужно так
Planet* P = new Planet;

Потому что указатель - это переменная, в которой хранится адрес объекта,
когда ты пишешь:
Код

Planet* P;

то ты создаешь указатель P, в котором может хранится адрес объекта класса Planet.
Но сейчас указтель P никуда не указывает, в нем находится мусор.

С помощью new ты создаешь новый объект класса Planet, операция new возвращает его адрес, и этим адресом инициализируется указатель P:
Код

Planet* P = new Planet;

То есть теперь существует и объект, и указатель на него. Поэтому ты можешь обращаться к нему в дальнейшем с помощью "->".



Это сообщение отредактировал(а) BreakPointMAN - 29.1.2006, 17:50


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
GLOOM
Дата 29.1.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.1.2006

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



Ладно не парься sim7 меня чёто занесло

Если бы я совершенно не разбирался в указателях меня вот это поставило в тупик: указатель на класс

кстати
MyClass MyObject1;
MyObject1->MyFunc();

"звездочку" smile забыл перед MyClass или точку после MyObject1 заместо ->

и всётаки
почему нельзя просто написать
Planet* P; а нужно так
Planet* P = new Planet;
и не надо разъяснять что оператор new выделяет бла-бла-бла а почему bcb ругается
PM MAIL   Вверх
BreakPointMAN
Дата 29.1.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 6
Всего: 24



Цитата(GLOOM @ 29.1.2006, 17:08 Найти цитируемый пост)

первое я отлично понимаю разницу между объектом и указателем на него , даже более того я отлично понимаю разницу между ссылкой на объект и самим объектом.

Боюсь, что не понимаешь... судя по вопросам в данном топике...
Цитата(GLOOM @ 29.1.2006, 17:47 Найти цитируемый пост)

почему bcb ругается

а BCB ругается потому, что не знает, к какому объекту обращаться... этого объекта просто нет, если ты пишешь:
Код

Planet* P;
P->a=1;

поскольку в P лежит мусор




--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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