🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #5152

Re: een algoritme...

#5152
From: Roel Schroeven
Date: Wed, 14 May 2003 12:26
46 lines
3743 bytes
TRAX wrote:

>>Veiliger:
>>
>>void __fastcall TFrmhoofd::imgklik(TObject *Sender)
>>{
>>     TImage *Image = dynamic_cast<TImage*>(Sender);
>>     if (Image) {
>>         int rij = (Image->Tag >> 16) & 0xff;
>>         int kolom = Image->Tag & 0xff;
>>         // ...
>>     }
>>}
> 
> 
> t'is om van te bleiten :(
> ik doe hte op de veilige manier en dan krijg ik de volgende fout:
> Cannot cast from 'TObject *' to 'TImage'
> aangezien ik geen snars van dat stukje code snap, weet ik niet hoe de fout
> weg te krijgen :(

Korte uitleg: ben je het sterretje niet vergeten?

Lange uitleg:
De pointer die de functie binnenkrijgt is van het type TObject, maar kan 
wijzen naar objecten van alle klassen die rechstreeks of onrechtstreeks 
afleiden van TObject. Zowat alle VCL-klassen dus, onder andere TImage.

Tag is een property die niet bestaat voor TObject, wel voor TImage 
(eigenlijk voor TControl en alles wat daarvan afleidt). Wat de compiler 
niet weet maar jij en ik wel is dat de pointer in deze functie altijd 
naar een TImage wijst, omdat ze enkel gebruikt wordt als event handler 
voor TImage-objecten. Dus moeten we de compiler wijsmaken dat we te doen 
hebben met een TImage: een cast dus. Een dynamic cast in dit geval. De 
veilige vorm gaat checken of TImage wel degelijk afleidt van TObject, en 
geeft een null-pointer als dat niet zo blijkt te zijn. In het andere 
geval geeft dynamic_cast de pointer terug, maar dan met het gewenste 
type. Het type dat we opgeven is het type van de pointer, dus er moet 
een sterretje bij staan.

De quick and dirty methode, erfenis uit C, geeft altijd de pointer terug 
zonder enige vorm van controle.

-- 
"Codito ergo sum"
Roel Schroeven
Technical Details
Message-ID: <_Bqwa.1654$1u5.196@afrodite.telenet-ops.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-09!supernews.com!newsfeed.online.be!news.tele.dk!news.tele.dk!small.news.tele.dk!news-out.cwix.com!newsfeed.cwix.com!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <T%awa.698$1u5.156@afrodite.telenet-ops.be> <fXdwa.1083$1u5.154@afrodite.telenet-ops.be> <y%kwa.1270$1u5.216@afrodite.telenet-ops.be> <8nmwa.1335$1u5.157@afrodite.telenet-ops.be> <Iumwa.1342$1u5.172@afrodite.telenet-ops.be> <1rnwa.1395$1u5.221@afrodite.telenet-ops.be> <FNnwa.1422$1u5.241@afrodite.telenet-ops.be> <n_nwa.1437$1u5.182@afrodite.telenet-ops.be> <37owa.1443$1u5.153@afrodite.telenet-ops.be> <%iowa.1456$1u5.237@afrodite.telenet-ops.be> <2Yowa.1503$1u5.257@afrodite.telenet-ops.be> <9zpwa.1546$1u5.247@afrodite.telenet-ops.be> <gPpwa.1558$1u5.25@afrodite.telenet-ops.be> <vVpwa.1571$1u5.234@afrodite.telenet-ops.be> <v3qwa.1580$1u5.263@afrodite.telenet-ops.be> <rbqwa.1590$1u5.60@afrodite.telenet-ops.be> <Ipqwa.1627$1u5.254@afrodite.telenet-ops.be> <Qsqwa.1632$1u5.172@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,dcf5f7295edf5117
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2003-05-14 05:30:37 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-09!supernews.com!newsfeed.online.be!news.tele.dk!news.tele.dk!small.news.tele.dk!news-out.cwix.com!newsfeed.cwix.com!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
From: Roel Schroeven <j4nff5m02@sneakemail.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4b) Gecko/20030507
X-Accept-Language: nl-be, nl, en-us, en
MIME-Version: 1.0
Newsgroups: be.comp.programming
Subject: Re: een algoritme...
References: <T%awa.698$1u5.156@afrodite.telenet-ops.be> <fXdwa.1083$1u5.154@afrodite.telenet-ops.be> <y%kwa.1270$1u5.216@afrodite.telenet-ops.be> <8nmwa.1335$1u5.157@afrodite.telenet-ops.be> <Iumwa.1342$1u5.172@afrodite.telenet-ops.be> <1rnwa.1395$1u5.221@afrodite.telenet-ops.be> <FNnwa.1422$1u5.241@afrodite.telenet-ops.be> <n_nwa.1437$1u5.182@afrodite.telenet-ops.be> <37owa.1443$1u5.153@afrodite.telenet-ops.be> <%iowa.1456$1u5.237@afrodite.telenet-ops.be> <2Yowa.1503$1u5.257@afrodite.telenet-ops.be> <9zpwa.1546$1u5.247@afrodite.telenet-ops.be> <gPpwa.1558$1u5.25@afrodite.telenet-ops.be> <vVpwa.1571$1u5.234@afrodite.telenet-ops.be> <v3qwa.1580$1u5.263@afrodite.telenet-ops.be> <rbqwa.1590$1u5.60@afrodite.telenet-ops.be> <Ipqwa.1627$1u5.254@afrodite.telenet-ops.be> <Qsqwa.1632$1u5.172@afrodite.telenet-ops.be>
In-Reply-To: <Qsqwa.1632$1u5.172@afrodite.telenet-ops.be>
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Lines: 47
Message-ID: <_Bqwa.1654$1u5.196@afrodite.telenet-ops.be>
Date: Wed, 14 May 2003 12:26:34 GMT
NNTP-Posting-Host: 213.119.50.61
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1052915194 213.119.50.61 (Wed, 14 May 2003 14:26:34 MET DST)
NNTP-Posting-Date: Wed, 14 May 2003 14:26:34 MET DST
Organization: Telenet Internet