|
Heh. I guess I should have read your actually question....
I'm surprised your while loop only got 70% of the CPU...it
pegs one of my CPUs to nearly 100%
Busy loops are bad in Windows!!!
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
You're a legend
There's a post on the microsoft.public.vc.language from a
Microsoft employee that states there's evidence that you are
a BOT because of the way you post to so many newsgroups
simultaneously.
Next time you're here, we'll throw water on you to see if you short-circuit...
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
|
Hey Johannes,
Long time no see!
It's interesting....the community is still discussing George...
They're starting to convince me he's not real...
The machines....they're taking over...
Cheers,
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
OMG poor toxxct, fighting against the machine!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
!!
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Of course I think he's lucky that toxxct isnt here.
|
|
|
|
|
|
Mark Salsbery wrote: there's evidence that you are
a BOT
I don't believe humans are scientifically advanced enough to create a BOT that is that dense.
led mike
|
|
|
|
|
Wow I saw his questions on the newsgroups(google) and other forums one thing was iinteresting for me I used of google for search about a problem but first link was George_George (of course I respect to George_George ).
|
|
|
|
|
If I have one class derived from another, an overloaded virtual function in the base class, and an implementation of one of the overloaded functions in the derived class, the compiler will only let me call one of the overloaded functions from a pointer/reference of an instance of the derived class. I am confused as why it won't acknowledge the other function. Can anyone help me understand why this is?
class CBaseClass
{
public:
CBaseClass(void) {}
virtual ~CBaseClass(void) {}
virtual void DoSomething(int a) {}
virtual void DoSomething(int a, int b) {}
};
class CDerivedClass : public CBaseClass
{
public:
CDerivedClass(void) {}
virtual ~CDerivedClass(void) {}
virtual void DoSomething(int a) {}
};
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
CDerivedClass testing;
testing.DoSomething(5,5); // Get an error on this line
// error C2660: 'CDerivedClass::DoSomething' : function does not take 2 arguments
}
|
|
|
|
|
You either need to implement a two-argument DoSomething() function, or make testing a CBaseClass object.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Thanks for the advice on how to cope with it. You don't by any chance know what is responsible, topic wise, for this behavior?
Is this because of the concept of "Hiding"? I'm not sure what topic I need to google for to better understand it.
Thanks
|
|
|
|
|
bob16972 wrote: You don't by any chance know what is responsible, topic wise, for this behavior?
CDerivedClass does not have a two-argument DoSomething() method, hence the compiler error.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I guess I'm missing the point. I apologize if I'm missing something right under my nose.
If your saying a derived class needs to implement all the virtual methods that are in the base, then I guess I'm not understanding why this works...
class CBaseClass
{
public:
CBaseClass(void) {}
virtual ~CBaseClass(void) {}
virtual void DoSomething(int a) {}
virtual void DoSomething(int a, int b) {}
};
class CDerivedClass : public CBaseClass
{
public:
CDerivedClass(void) {}
virtual ~CDerivedClass(void) {}
};
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
CDerivedClass testing;
testing.DoSomething(5,5); // Get an error on this line
}
|
|
|
|
|
bob16972 wrote: If your saying a derived class needs to implement all the virtual methods that are in the base,
They don't have to be implemented, but when they are, their types must match.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
BTW, the following is allowed
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
CBaseClass *pCDerivedClass = new CDerivedClass();
pCDerivedClass->DoSomething(5,5);
}
Please note: error check and cleanup left to the reader...
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
Noted.
I had become complacent with being able to call any function implemented in the base class regardless of whether it was virtual using a pointer from any level in the derived hierarchy when there were no overloaded functions in the base class. This kinda throws me curve ball but I'm learning.
Thanks for the info.
|
|
|
|
|
hmm...what happened to inheritance?
CDerivedClass is a CBaseClass.
Logically, this doesn't seem like it should be an error.
Until you convince me otherwise
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
bob16972 wrote: Thanks for the advice on how to cope with it. You don't by any chance know what is responsible, topic wise, for this behavior?
Is this because of the concept of "Hiding"? I'm not sure what topic I need to google for to better understand it.
Polymorphism[^]
Therefore, what the virtual keyword does is to allow a member of a derived class with the same name as one in the base class to be appropriately called from a pointer, and more precisely when the type of the pointer is a pointer to the base class but is pointing to an object of the derived class
led mike
|
|
|
|
|
thanks. I guess the part that is confusing me is why a pointer, at any level, will invoke the base implementations when no function is overloaded (and not implemented in a derived class) but a pointer at the base class is required when functions are overloaded and an implementation for at least one overloaded function is not provided in the derived class.
|
|
|
|
|
You can add a using statement to promote the visibility of the base class functions.
class CDerivedClass : public CBaseClass
{
public:
CDerivedClass(void) {}
using CBaseClass::DoSomething;
virtual ~CDerivedClass(void) {}
virtual void DoSomething(int a) {}
};
The eliminates the "hiding" problem.
|
|
|
|
|
That seems to fix the issue.
Thanks for the help. Now I need to go back and undo the workaround code and the half baked solution I put in.
|
|
|
|
|
? I understand the basics of OOP and classes. But all the general info always talks about the box, the cat, the dog, the car etc. No one ever talks about user interface, database etc. Can someone shed some light on these subjects? Seems to me that for a compete program one would have to develop various class modules so to speak.
Thanks.
|
|
|
|