|
If DerivedClass is not going to do anything but call the BaseClass virtual function then why even declare this function in this class.
If AnotherDerived will first do some stuff and then call the BaseClass virtual then you still do not need the function in the DerivedClass.
void AnotherDerivedClass::SomeMethod(){<br />
BaseClass::SomeMethod();
}<br />
What you choose to do should be based on what the program/design requirements are.
|
|
|
|
|
Good question. Here's my answer:
1. Your AnotherDerivedClass::SomeMethod can always call DerivedClass::SomeMethod. If DerivedClass does not have it, the compiler will automatically call BaseClass's method.
2. You can certainly call BaseClass::SomeMethod from AnotherDerivedClass. (This isn't allowed in Java, by the way).
3. You only need to have a (dummy) DerivedClass::SomeMethod whenever you have another method of the same name with a different set of parameters. Here's the example:
void DerivedClass::SomeMethod()
{
BaseClass::SomeMethod();
}
void DerivedClass::SomeMethod(int nParam)
{
}
If you didn't have DerivedClass::SomeMethod() in DerivedClass, the compiler would not allow you to call DerivedClass::SomeMethod, either from AnotherDerivedClass or through an instance of the class.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
Alvaro Mendez wrote:
2. You can certainly call BaseClass::SomeMethod from AnotherDerivedClass. (This isn't allowed in Java, by the way).
I don't know Java ? so, in Java I'd have to call the base class method for each derive class ?
Alvaro Mendez wrote:
If you didn't have DerivedClass::SomeMethod() in DerivedClass, the compiler would not allow you to call DerivedClass::SomeMethod, either from AnotherDerivedClass or through an instance of the class.
Yep! that I know!
Thanks
Max.
|
|
|
|
|
Maximilien wrote:
I don't know Java ? so, in Java I'd have to call the base class method for each derive class ?
Well, in Java you can only refer to the class to which you directly derived from, via the super keyword.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
Alvaro Mendez wrote:
Well, in Java you can only refer to the class to which you directly derived from, via the super keyword.
Sounds like Apple's ObjectC language, I have to look at ObjectiveC book tonight!
Max.
|
|
|
|
|
Hi.
I have a Char which containes a number, example 32. How do I convert the char to INT?
char cTest[100]="32";
int iTest;
now I want to convert the cTest to iTest so it's a integer instead of a char.
Any function which can do this?
thanks for any info.
|
|
|
|
|
atoi.
int iTest = atoi(cTest);
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
i'll second that.
also, if you need a double, atof:
double data = atof(szData);
- Nitron
"Those that say a task is impossible shouldn't interrupt the ones who are doing it." - Chinese Proverb
|
|
|
|
|
I think the easiest way would be to simply cast it...
iTest = (int)cTest[i];
Wouldn't that work?
Programming in binary is as easy as 01 10 11.
|
|
|
|
|
Nope, it wouldn't work. Only the first character would be converted, and to it's ASCII value -- which is not what he needs.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
Ah, my mistake... Didn't see the quote around 32... Thought he had an array of char's, not a string.
Programming in binary is as easy as 01 10 11.
|
|
|
|
|
I generally bring up a console project and test my theory if I'm not sure about advice I am about to give
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
C# will attract all comers, where VB is for IT Journalists and managers - Michael P Butler 05-12-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
If you don't care about performance you can do:
sscanf (cTest, "%d", &iTest);
/ravi
Let's put "civil" back in "civilization"
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
I'm having troubles modifying the menus for the ole server once embedded into a container document.
Thanks
|
|
|
|
|
Hi,
i think this problem may be easy to answer for you.
I have created my own class:
-header-file:
class CTrayIcon : public CWnd
{
public:
CTrayIcon(); // Konstruktor
virtual ~CTrayIcon(); // Dekonstruktor
int AddTrayIcon(HICON pIcon,int iMenu);
protected:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTrayIcon)
//}}AFX_VIRTUAL
protected:
//{{AFX_MSG(CTrayIcon)
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
The Class-Wizard automatically adds the function OnSysCommand to the header and of course to the cpp. Now, i do not know, what i must do, that all messages of the dlg-window(main-dialog-window), especially WM_SYSCOMMAND, can catch in my class ?
|
|
|
|
|
beni27_27 wrote:
Now, i do not know, what i must do, that all messages of the dlg-window(main-dialog-window), especially WM_SYSCOMMAND, can catch in my class ?
I don't understand what you're asking; please clarify.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
I have written a .NET assembly that I want to use in MFC 6.0. According to an MSDN article[^], I need to use the Regasm.exe to make the necessary entries in the registry. I have gone ahead and done this using the following command to create a type library as well:
regasm mcpp.dll /tlb:mcpp.tlb
From what I understood, I then needed to reference the type library that is created one of two ways:
#import "mcpp.tlb" raw_interface_only
or
#import "mscorlib.tlb"
#import "mcpp.tlb"
I have done this however as soon as I try to compile following this it throws a slew of error within either mcpp.tlb or mscorlib.tlb , depending on which item I try (as I have tried both methods). Does anyone have any experience doing anything of this nature. Thanks
Nick Parker
Not everything that can be counted counts, and not everything that counts can be counted. - Albert Einstein
|
|
|
|
|
Hi,
I need to output some CString data after I've copied it to a char array (ie: char ptrSomeCharArray[33]). I can't seem to get the data extracted from the CString object.
I've tried:
CString m_sFullname("Like2Byte"), m_sAccount("12345678"), m_sRoom("222");
char SomeCharArray[33];
sprintf( SomeCharArray + strlen(SomeCharArray), "%s", m_sAccount);
sprintf( SomeCharArray + strlen(SomeCharArray), "%s", m_sRoom);
sprintf( SomeCharArray + strlen(SomeCharArray), "%s", m_sFullname);
While this compiles without error, inserting it into a
MessageBox function displays garbage. Even wrapping the var in TEXT() doesn't work. I've also tried casting using LPCTSTR, LPTSTR and (const char*). None work correctly.
Anyone help out?
|
|
|
|
|
Have you tried e.g. sprintf( SomeCharArray + strlen(SomeCharArray), "%s", m_sAccount.GetBuffer(0)); ?
But err, what does the sprintf do? Do you want to append the CString to SomeCharArray? You should use strcat instead
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Well, I tried m_sAccount.Mid(0) but that gave me the same results are m_sAccount.
Let me try your suggestion.
(The 'In a nut-shell' explination)sprintf basically copies whatever kind of data to end of another string converting it to a string when it's all done.
say, SomeCharArray contains "HelloWorld" and someIntValue = 32768.
Therefore, sprintf(SomeCharArray + strlen(SomeCharArray), "%i", someIntValue); copies 32768 to the end of SomeCharArray; thus, leaving, "HelloWorld32768".
(BRB)
|
|
|
|
|
Any time you use a string object (CString or any other string wrapper class) with the printf family of functions, you need to cast the object to a pointer type, so that only the pointer is put on the stack.
sprintf( SomeCharArray + strlen(SomeCharArray), "%s", (LPCTSTR) m_sAccount); But as Gregor said, the real bug in your code is how you construct the string in the first place. Just use one sprintf() call.
--Mike--
Friday's GoogleFight results: Britney Spears 2,190,000 - Erica Weichers 23
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Of all the places I put (LTCTSTR), I *don't* think I placed it right there.
(BRB)
|
|
|
|
|
You can use strcpy, like this:
strcpy(SomeCharArray, m_sAccount + m_sRoom + m_sFullname);
However, you need to be careful that the length of the 3 variables does not surpass the size of SomeCharArray - 1.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
yeah, thats the method I would use. Nice and easy
|
|
|
|
|
You need to initialize SomeCharArray to an empty string, either via
SomeCharArray[0] = '\0'; or
strcpy(SomeCharArray,""); otherwise, you're concatenating at an arbitrary location in the string. Another way to do this would be
sprintf("%s%s%s",m_sAccount,m_sRoom,m_sFullname);
Software Zen: delete this;
|
|
|
|