Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Typecast C++

2.1K
24 октября 2009 года
smoki
115 / / 05.11.2006
Здравствуйте, у меня такая проблема, не могу сделать Typecast в с++.

Задача состоит в том, чтобы получить имя объекта, который вызвал событие, например onclick();

В Delphi такой код работает:
 
Код:
str := TRadioButton(Sender).Caption;


В C++, такой же код компилируется, но не работает, может я что - то не так делаю?

Заранее спасибо.


Решение нашел сам. Извините за беспокойство. Но может мне все-таки объяснить почему приведенный мною код не работает?
Как я понял Typecast в С++ делается так:
 
Код:
str = dynamic_cast<TButton*>(Sender)->Caption;
43K
24 октября 2009 года
loki231
76 / / 27.09.2009
Дружище!
 
Код:
str := TRadioButton(Sender).Caption;
Означает: cоздать объект типа TRadioButton с родителем Sender, взять его заголовок и присвоить переменной str.
5
25 октября 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: loki231
Дружище!
 
Код:
str := TRadioButton(Sender).Caption;
Означает: cоздать объект типа TRadioButton с родителем Sender, взять его заголовок и присвоить переменной str.


Дружище!
Это Object Pascal, а код означает: привести объект Sender типа TObject к типу TRadioButton, после чего обратиться к свойству Caption.
В случае, если Sender не окажется TRadioButton или его наследником, будет сгенерировано исключение.

1
25 октября 2009 года
kot_
7.3K / / 20.01.2000
Цитата: smoki
Здравствуйте, у меня такая проблема, не могу сделать Typecast в с++.

Задача состоит в том, чтобы получить имя объекта, который вызвал событие, например onclick();

В Delphi такой код работает:
 
Код:
str := TRadioButton(Sender).Caption;


В C++, такой же код компилируется, но не работает, может я что - то не так делаю?

Заранее спасибо.


Решение нашел сам. Извините за беспокойство. Но может мне все-таки объяснить почему приведенный мною код не работает?
Как я понял Typecast в С++ делается так:
 
Код:
str = dynamic_cast<TButton*>(Sender)->Caption;


Приведение типов действительно делается в С++ либо так, либо просто

 
Код:
str= ((TButton*)Sender)->Caption;

В первом случае надо обрабатывать исключение, во втором - проверять что указатель может быть приведен к необходимому типу.
43K
25 октября 2009 года
loki231
76 / / 27.09.2009
Цитата: hardcase
Дружище!
Это Object Pascal, а код означает: привести объект Sender типа TObject к типу TRadioButton, после чего обратиться к свойству Caption.
В случае, если Sender не окажется TRadioButton или его наследником, будет сгенерировано исключение.



Товарищ пишет про C++. Так что речь идёт не о Object Pascal и Ваш сарказм совершенно не уместен.

и str=TRadioButton(Sender).Caption() делает именно то, о чем я сказал. А как я понял из поста топикастера, он использовал именно такую конструкцию. И результат получился не такой, на который он расчитывал по той причине, что схожие синтаксические конструкции в данном случае несут совершенно разный смысл.

1
26 октября 2009 года
kot_
7.3K / / 20.01.2000
Не сооортесь гоооорячие эстонские парни. :)
231 хитровы.... ой, бог хитрости прав, правда с рядом оговорок -
 
Код:
str=TRadioButton(Sender).Caption()

вероятнее просто выдаст ошибку.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог