Difference between include directive and forward declaration in C++ -
i must refactor old code. 1 of problems exceeds on useless 'includes'. in same project, i've seen next syntax:
#include <anyclass> //a scheme header #include "anotheranyclass" //a application header class anotherclass; class class : public onemoreclass { public: explicit class(); ~class(); private: anotherclass *m_anotherclass; } i'd figure out:
what differences between 'include "class"' , 'class class'? when should sec method used , how?
those 2 different things:
#include <anyclass> this normal include header (or type of textual) file. equivalent pasting content of anyclass file in spot typed inclusion directive (that's why include guards and/or compiler pragmas used prevent multiple inclusions in same file).
this syntax:
class anotherclass; is forward declaration , informs compiler of existence of anotherclass class. useful in many scenarios, e.g. suppose have 2 classes each 1 needs pointer other:
class classb { classa* pointer_to_classa; }; class classa { classb* pointer_to_classb; }; the above code generate error: "error: unknown type name 'classa'" since used classa type without compiler knowing (yet). compiler's parser know classa's existence when parses origin of class declaration.
to have above working need forwards declaration:
class classa; // classa type exists class classb { classa* pointer_to_classa; }; class classa { classb* pointer_to_classb; }; c++
No comments:
Post a Comment