[Message Deleted]
-
ppatel567 wrote:
Here why not only header files for CMyApp and CMySpec are not added. Why such kind of syntax?
They are called Forward Declarations. The header files for these classes will be included in the CPP file.
Nibu thomas Software Developer Faqs by Michael dunn
-
It is not always possible to include header with desired declaration, in some cases you just don't want class CPatel to heaviliy depend on CMyApp. In such cases (and if CMyApp only encounters in CMyApp* form) it is easier to make such preliminary declaration. Igor Green http://www.grigsoft.com/ - files and folders comparison tools
-
It is not always possible to include header with desired declaration, in some cases you just don't want class CPatel to heaviliy depend on CMyApp. In such cases (and if CMyApp only encounters in CMyApp* form) it is easier to make such preliminary declaration. Igor Green http://www.grigsoft.com/ - files and folders comparison tools
-
Well, you don't have to use it anyway :) In most cases it can be avoided. Igor Green http://www.grigsoft.com/ - files and folders comparison tools
-
It takes years of experience for you to understand what
grigsoft
said. You will learn it from coding larger-scaled programs.
Maxwell Chen
-
Well, you don't have to use it anyway :) In most cases it can be avoided. Igor Green http://www.grigsoft.com/ - files and folders comparison tools
Why would you want to avoid it? Minimizing dependencies in a header files is a good thing. Steve
-
Why would you want to avoid it? Minimizing dependencies in a header files is a good thing. Steve
Stephen Hewitt wrote:
Minimizing dependencies in a header files is a good thing.
I second Steve's opinion!
Maxwell Chen
-
This is called a Forward Declaration. The class
CPpatel
no doubt uses the services of the classesCMyApp
andCMySpec
and as such will have members that refer to them. IfCPpatel
has a member variable of, for example, theCMySpec
class then you need to#include
its header as the compiler needs to know its size to defineCPpatel
. For example:class CPpatel { .. .. .. CMySpec m_TheSpec; // Header must be included. };
If, on the other hand, theCPpatel
class contains a pointer or reference to theCMySpec
class then the compiler doesn't need to know the object's size as all pointers/references to a class are the same size. In this case you can use a Forward Declaration and you don't need to#include
its header. For example:class CPpatel { .. .. .. CMySpec *m_pTheSpec; // Only Forward Declaration needed. };
This is a good thing as it minimises the dependencies of the header file and thus increases the stability of the project (in terms of maintenance) and decreases compile times. Sometimes Forward Declarations are used to break cyclic dependencies but I'll not go into that at this stage. Steve -
ppatel567 wrote:
I sometimes noticed that in the header file its only written asanyheader.h=======class CMyApp;class CMySpec;
thats we call forward decalaration of class
"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
-
This kind of declaration is used to help the compiler to understand what string used into the code are sintax errors or objects that are somewhere defined. I'll try to find a way to explain this to you with two examples,... and remember that the compiler will read the code in the same way of you, i.e. from top to bottom: First case: the error!
class classA{ classB b; //The compiler tells: _What is **classB**? I don't know this.:(... => Error_ } class classB{ //Compiler interrupted:(, this isn't readed! ... }
Second case: OKclass classB; //You are telling to the compiler: _wait a moment, the definition of this class will came later_ class classA{ classB b; //The compiler tells: _What is **classB**? I don't know **how it is build**, but I know that it **exist** and it isn't a sintax error. So I can continue!_ } //The compiler tells: _Yahoooo:-D, now I will know what **classB** is!!_ class classB{ ... }
Hope be clear