COMP 2710 Software Construction Header Files Dr Xiao

  • Slides: 8
Download presentation
COMP 2710 Software Construction Header Files Dr. Xiao Qin Auburn University http: //www. eng.

COMP 2710 Software Construction Header Files Dr. Xiao Qin Auburn University http: //www. eng. auburn. edu/~xqin@auburn. edu

C++ Header Files • Build libraries of classes or functions • Re-used by many

C++ Header Files • Build libraries of classes or functions • Re-used by many different programs • Just like predefined libraries 1 -2

Build Libraries of Classes or Functions 1 -3

Build Libraries of Classes or Functions 1 -3

Header File Inclusion Rules • The inclusion mechanism should be tolerant to duplicate header

Header File Inclusion Rules • The inclusion mechanism should be tolerant to duplicate header file inclusions. • A header file should be included only when a forward declaration would not do the job. • The order of header file inclusion is not important. 1 -4

Rule 1: Be tolerant to duplicate header file inclusions. /* * Header file name:

Rule 1: Be tolerant to duplicate header file inclusions. /* * Header file name: estimate_function. h */ #ifndef ESTIMATE_FUNCTION_H #define ESTIMATE_FUNCTION_H #include <iostream> using namespace std; double estimate. Of. Total(int min. Peas, int max. Peas, int pod. Count); #endif 1 -5

Rule 2: Use forward declaration when possible. Suppose we want to define a new

Rule 2: Use forward declaration when possible. Suppose we want to define a new class B that uses objects of class A. #include class A; <A. h>; class B { private: A* f. Ptr. A ; public: void my. Method(const& A) const ; }; B only uses references or pointers to A. Use forward declaration then: you don't need to include <A. h>. This will in turn speed a little bit the compilation. 1 -6

When we need to include <A. h>? • B derives from A or B

When we need to include <A. h>? • B derives from A or B explicitely (or implicitely) uses objects of class A. You then need to include <A. h> #include <A. h>; class B : public A { } ; class C { private: A f. A ; public: void my. Method(A par) ; }; 1 -7

Exercise 1: Header Files • Assume a class A with code stored in a.

Exercise 1: Header Files • Assume a class A with code stored in a. cpp and a. h. #ifndef A_H #define A_H #include "abase. h" #include "b. h" // Forward Declarations/definition class C; class D; class A : public ABase { B m_b; C *m_c; D *m_d; public: void Set. C(C *c); C * Get. C() const; void Modify. D(D *d); }; #endif 1 -8