Typecast C++
Задача состоит в том, чтобы получить имя объекта, который вызвал событие, например onclick();
В Delphi такой код работает:
Код:
str := TRadioButton(Sender).Caption;
В C++, такой же код компилируется, но не работает, может я что - то не так делаю?
Заранее спасибо.
Решение нашел сам. Извините за беспокойство. Но может мне все-таки объяснить почему приведенный мною код не работает?
Как я понял Typecast в С++ делается так:
Код:
str = dynamic_cast<TButton*>(Sender)->Caption;
Код:
str := TRadioButton(Sender).Caption;
Цитата: loki231
Дружище!
Означает: cоздать объект типа TRadioButton с родителем Sender, взять его заголовок и присвоить переменной str.
Код:
str := TRadioButton(Sender).Caption;
Дружище!
Это Object Pascal, а код означает: привести объект Sender типа TObject к типу TRadioButton, после чего обратиться к свойству Caption.
В случае, если Sender не окажется TRadioButton или его наследником, будет сгенерировано исключение.
Цитата: smoki
Здравствуйте, у меня такая проблема, не могу сделать Typecast в с++.
Задача состоит в том, чтобы получить имя объекта, который вызвал событие, например onclick();
В Delphi такой код работает:
В C++, такой же код компилируется, но не работает, может я что - то не так делаю?
Заранее спасибо.
Решение нашел сам. Извините за беспокойство. Но может мне все-таки объяснить почему приведенный мною код не работает?
Как я понял Typecast в С++ делается так:
Задача состоит в том, чтобы получить имя объекта, который вызвал событие, например onclick();
В Delphi такой код работает:
Код:
str := TRadioButton(Sender).Caption;
В C++, такой же код компилируется, но не работает, может я что - то не так делаю?
Заранее спасибо.
Решение нашел сам. Извините за беспокойство. Но может мне все-таки объяснить почему приведенный мною код не работает?
Как я понял Typecast в С++ делается так:
Код:
str = dynamic_cast<TButton*>(Sender)->Caption;
Приведение типов действительно делается в С++ либо так, либо просто
Код:
str= ((TButton*)Sender)->Caption;
В первом случае надо обрабатывать исключение, во втором - проверять что указатель может быть приведен к необходимому типу.
Цитата: hardcase
Дружище!
Это Object Pascal, а код означает: привести объект Sender типа TObject к типу TRadioButton, после чего обратиться к свойству Caption.
В случае, если Sender не окажется TRadioButton или его наследником, будет сгенерировано исключение.
Это Object Pascal, а код означает: привести объект Sender типа TObject к типу TRadioButton, после чего обратиться к свойству Caption.
В случае, если Sender не окажется TRadioButton или его наследником, будет сгенерировано исключение.
Товарищ пишет про C++. Так что речь идёт не о Object Pascal и Ваш сарказм совершенно не уместен.
и str=TRadioButton(Sender).Caption() делает именно то, о чем я сказал. А как я понял из поста топикастера, он использовал именно такую конструкцию. И результат получился не такой, на который он расчитывал по той причине, что схожие синтаксические конструкции в данном случае несут совершенно разный смысл.
231 хитровы.... ой, бог хитрости прав, правда с рядом оговорок -
Код:
str=TRadioButton(Sender).Caption()
вероятнее просто выдаст ошибку.