C++ Interitance and functions within functions

Started by
2 comments, last by Marsupial Rodentia 23 years, 2 months ago
A while ago someone made a post in the forums about how PASCAL has functions within functions and how neat it would be if C++ had that too. One reply to the thread was that you could declare a struct or a class inside a function, and it could have member functions. Of course as I read all that I said to myself "Why the #$&@? I would never want to do any such thing!" So today, as I was working on a tool, and pondering, ... and then I wrot this code:
  
void CChunkPackerApp::OnPopupChunkproperties() 
{
	// NOTE 1. Now this is really bizar! Why the C++ Language allows things like this, I don''t know!!!

	// This is a struct inside a function that inherits from a class... and its all valid syntax, and it works too.


	// NOTE 2. The PromptProperties() function needs to operate on the context of CChunkInfo, but 

	// CChunkInfo has no knowledge of property dialog boxes or the dialog templates or the resource IDs.

	
	struct CPropableChunkInfo : public CChunkInfo
	{
		void PromptProperties()
		{
			// Construct the dialog box

			CPropertySheet propSheet;
			CChunkPropPage1 propPage1;
			CChunkPropPage2 propPage2;

			// TODO: Set the data into the dialog

			

			// Hide the apply button and the help button

			propSheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
			propSheet.m_psh.dwFlags &= ~PSH_HASHELP;
			propPage1.m_psp.dwFlags &= ~PSP_HASHELP;  
			propPage2.m_psp.dwFlags &= ~PSP_HASHELP;  

			// Prompt the user to change the data

			propSheet.AddPage(&propPage1);
			propSheet.AddPage(&propPage2);
			propSheet.SetTitle( "Chunk Properties" );

			if( IDOK != propSheet.DoModal() )
				return;
			
			// TODO: Set My Data Members from the dialog.


		}
	};

	// Get the Selected Chunk

	CPropableChunkInfo* pci = (CPropableChunkInfo*)_GetWorkspaceDocument()->GetCurSelChunk();
	
	// Prompt the user for properties.

	if( pci != NULL )
		pci->PromptProperties();
}
  
Well, I guess I should never say never.
Advertisement
The struct has limits though so better check your c++ standard.
I''m using MSVC++6 to make Win32 tools for my designers, and I use Metrowerks for the PSX2 for the game engine.

What are the limitations of struct? As far as I know, struct and class are exactly the same in C++, except that struct members by default are public, class members by default are private.

If I explicitly use public, private, and protected thoughout my class and struct declarations and never assume anything about defaults, I should be able to use struct and class keywords interchangably. Why would the compiler care?

There''s a slight difference between the way pascal (& Delphi) handle embedded functions and they way C++ handles nested classes.

A nested class in C++ is a class just-the-same with a different scope (perhaps lifetime as well when nested inside a function). Whereas in pascal, an embedded function also has context, which means it can access variables in the parent function (without passing them in - it knows where it lives, so to speak).

Incidentally, pascal has no scope resolution operator (that I know of anyway), so if you declare a local variable with the same name as a parent variable, you can''t access the parent variable

It may be of little consequence, but I had to sit through a mind-numbingly boring class to learn that, so I feel compelled to spread the torment whenever I can

But you bring up an interesting point - you could make a local functor object (overload operator()) and voila! a nested function in C++. I''ll definetly remember that - I hate creating private methods for simple stuff that I do repetedly in a single function - and I''ll break out the trout if I hear anything about a macro . Thanks!

Magmai Kai Holmlor
- The disgruntled & disillusioned
- The trade-off between price and quality does not exist in Japan. Rather, the idea that high quality brings on cost reduction is widely accepted.-- Tajima & Matsubara

This topic is closed to new replies.

Advertisement