|
your answer is similar with my guess.
but is there any way to implement the dynamical conversion from the base class object to a derived one.
if not ,I would have to delete the base class object and recreate a derived one with the new operator. in this case I can't see the benefit of the inheritance, can I?
Thank you very much!!!
-------------------
I am learning C++ and English
|
|
|
|
|
You could write a constructor in the derived type that takes a reference to the base type. Why do you need to do this? It is not something that one finds he has to do often in OO code. Typically the situation is that you create a derived type but talk to it using a base class interface.
Steve
|
|
|
|
|
Maybe we can help you if you describe clearly what you need to do
|
|
|
|
|
Thank you guys, I finally understand it with your help.
Only if it "is" actually the "specified type" in the memory can you convert it into the "specified type" .
I have thought through and figure that maybe my problem dose be a complicated one and I can't find a short cut for it .
Thank you very much, again!!!
-------------------
I am learning C++ and English
|
|
|
|
|
Score: 1.8 (2 votes).
How are the scores calculated? Obviously not an average as 3.6 (2x1.8) can't be obtained by adding 2 scores.
Steve
|
|
|
|
|
I have no idea what happened, either. I remember I voted for to 4 or 5.
could someone in charge of this explain the problem?
Thank you very much!!!
-------------------
I am learning C++ and English
|
|
|
|
|
the scores are ponderated with the level of the members...
- a bronze member votes for 1 voice
- a silver member votes for 2 voices
- a gold member votes for 4 voices
- a platinum member votes for 8 voices
TOXCCT >>> GEII power [toxcct][VisualCalc 2.20][VCalc 3.0 soon...]
|
|
|
|
|
|
|
ewighell wrote: BaseClass pBaseClass = new BaseClass();
replace with
BaseClass pBaseClass = new DerivedClass();
that's what polymorphism was designed for !
TOXCCT >>> GEII power [toxcct][VisualCalc 2.20][VCalc 3.0 soon...]
-- modified at 3:46 Thursday 19th January, 2006
|
|
|
|
|
just by casting the baseclass pointer to derived class pointer does not make the object that was created i.e. baseclass into a dereived class.
Its just like calling Donkey a dog does not make donkey to bark .
so you can do this.
BaseClass* pBaseClass = new DerivedClass();<br />
<br />
((DerivedClass*)pBaseClass)->functionInDerivedClassOnly();
or use reinterpret_cast
-Prakash
|
|
|
|
|
|
|
|
toxcct wrote: hey, you posted the same thing as i did 1 hour later
I did not read the other solutions
-Prakash
|
|
|
|
|
toxcct wrote: where were you ?
Me, Sleeping
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
|
In the example above you should use static_cast<DerivedClass*>(pBaseClass) .
It's safer (but still not 100% safe) as it will only compile if it's possible for BaseClass s to exist which are also DerivedClass s (there is an inheritance relationship between them).
Steve
|
|
|
|
|
Stephen Hewitt wrote: In the example above you should use static_cast<derivedclass*>(pBaseClass)
yes, correct. Thanks.
-Prakash
|
|
|
|
|
Hi everybody. Yet another episode of my miserable API window wrapper saga. As I told you all, I'm working at a window wrapper over API. My window wrapper will be able to create controls on a window and all controls will come subclassed directly and handleled by a higher level "window master" using a singly linked list to memorise procedure pointers and stuff like this. One of the functions of this gizmo is nice tooltip windows (a lot nicer than the Windows Standard, with my own shadow system that will work even on windows 2000 which doesn't support CS_DROPSHADOW). Maybe I'll publish it here when finished, in my usual habbit: I help those who help. I already posted an article with stuff I learned here and it won't be the last. But anyway, if my freeware application has enough success I'll probably make it open source and this is a component of that application. Well, anyway, I can't finish it anyway if I can't get rid of such problems:
I am creating a WS_POPUP window via CreateWindowEx and my own class.
I am NOT showing that window.
Within it, I am creating a WS_CHILD from class "Static" (it's practically a label for displaying text).
I show the kid.
I show the parent.
Where's the kid !??!!?
Why don't I see the kid? Maybe 'cause I created it and showed it when the parent was hidden? My next logical assumption was to send another ShowWindow(hwndKID, true) to the kid. But it still doesn't get shown. Grrrrrrrr.
Thank you in advance and sorry for the long intro... got ahead of myself ::- D.
-= E C H Y S T T A S =-
The Greater Mind Balance
|
|
|
|
|
Check that it works when both are initially visible (add the WS_VISIBLE style to the window creation calls). It it doesn't (which I suspect will be the case) then the problem isn't with dynamically showing/hiding.
Steve
|
|
|
|
|
It doesn't. I tried like you said and both windows are created with WS_VISIBLE. What does this mean? I create the parent as visible but it doesn't get shown right away.... It gets shown only after the control is created but then the control isn't visible, again.
-= E C H Y S T T A S =-
The Greater Mind Balance
|
|
|
|
|
If a window is created with the WS_VISIBLE style it will be visible as soon as it is created: No call to ShowWindow will be required. Can you show us the code in question?
Steve
|
|
|
|
|
Thanks for answering by the way :- ). Yes, I know what WS_VISIBLE does. The code is quite big and has some other functions. I will try to keep it down as much as possible not to clog the post.
1. Window is created via a call to a Build function. The Build function creates the PARENT like this:
hwndThis = CreateWindowEx<br />
(<br />
NULL,<br />
sClassName,
sClassName,<br />
WS_POPUP | WS_VISIBLE,<br />
0,<br />
0,<br />
W,
H,<br />
NULL,<br />
NULL,<br />
hHost,
NULL<br />
);
2. The kid is created like this, using a call to a CreateControl function, AFTER the Build function finished its stuff:
<br />
hwndControl = CreateWindowEx
(<br />
NULL,
"Static",
Text,
lStyle,
0,
0,
0,
0,
hwndThis,
NULL,
(HINSTANCE)hwndThis,
NULL
);
The conclusion is that I don't see the kid displayed. At all.
However, if I call the CreateControl function when clicking some other button, it works. What doesn't work is when in the same place I do
Build
CreateControl
But if I do:
Build
<now click="" some="" button="">
CreateControl <in the="" code="" of="" that="" button="">
It works.
-= E C H Y S T T A S =-
The Greater Mind Balance
|
|
|
|
|
Looks like it's because the child has 0 width and height. Also the hInstance is set wrong. Try this (but correct the hInstance ):
<br />
hwndControl = CreateWindowEx
(<br />
NULL,
"Static",
Text,
lStyle,
0,
0,
100, <br />
100, <br />
hwndThis,
NULL,
(HINSTANCE)hwndThis, <br />
NULL
);<br />
In general casting should be avoided. For example without the (HINSTANCE) cast you would get a compiler but with it you're telling the compiler "just do it" and circumventing type checking.
Steve
-- modified at 3:05 Thursday 19th January, 2006
|
|
|
|