The C++Course provides a general introduction to programming in C++. It is based on A.B. Downey's book, How to Think Like a Computer Scientist. Click here for details. |
![]() |
Home ![]() ![]() |
||
![]() ![]() ![]() ![]() ![]() ![]() |
||
Header Files
There is a reason for the hassle, though, which is that it is now possible to separate the structure definition and the functions into two files: the header file, which contains the structure definition, and the implementation file, which contains the functions. Header files usually have the same name as the implementation file, but with the suffix .h instead of .cpp. For the example we have been looking at, the header file is called Time.h, and it contains the following: struct Time {// instance variables int hour, minute; double second; // constructors Time (int hour, int min, double secs); Time (double secs); // modifiers void increment (double secs); // functions void print () const; bool after (const Time& time2) const; Time add (const Time& t2) const; double convertToSeconds () const; }; Notice that in the structure definition I don't really have to include the prefix Time:: at the beginning of every function name. The compiler knows that we are declaring functions that are members of the Time structure. Time.cpp contains the definitions of the member functions (I have elided the function bodies to save space): #include <iostream.h>#include "Time.h" Time::Time (int h, int m, double s) ... Time::Time (double secs) ... void Time::increment (double secs) ... void Time::print () const ... bool Time::after (const Time& time2) const ... Time Time::add (const Time& t2) const ... double Time::convertToSeconds () const ... In this case the definitions in Time.cpp appear in the same order as the declarations in Time.h, although it is not necessary. On the other hand, it is necessary to include the header file using an include statement. That way, while the compiler is reading the function definitions, it knows enough about the structure to check the code and catch errors. Finally, main.cpp contains the function main along with any functions we want that are not members of the Time structure (in this case there are none): #include <iostream.h>#include "Time.h" void main () { Time currentTime (9, 14, 30.0); currentTime.increment (500.0); currentTime.print (); Time breadTime (3, 35, 0.0); Time doneTime = currentTime.add (breadTime); doneTime.print (); if (doneTime.after (currentTime)) { cout << "The bread will be done after it starts." << endl; } } Again, main.cpp has to include the header file. It may not be obvious why it is useful to break such a small program into three pieces. In fact, most of the advantages come when we are working with larger programs:
For small programs like the ones in this book, there is no great advantage to splitting up programs. But it is good for you to know about this feature, especially since it explains one of the statements that appeared in the first program we wrote: #include <iostream.h>iostream.h is the header file that contains declarations for cin and cout and the functions that operate on them. When you compile your program, you need the information in that header file. The implementations of those functions are stored in a library, sometimes called the "Standard Library" that gets linked to your program automatically. The nice thing is that you don't have to recompile the library every time you compile a program. For the most part the library doesn't change, so there is no reason to recompile it.
|
||
Home ![]() ![]() |