tag:blogger.com,1999:blog-2349434231090974738.post246687945748062212..comments2023-10-24T19:15:52.177+01:00Comments on Advanced C++ with Examples: Forwarding functionsZahid Ghadialyhttp://www.blogger.com/profile/11618208626682295272noreply@blogger.comBlogger2125tag:blogger.com,1999:blog-2349434231090974738.post-20029527604290544432010-06-16T11:58:21.721+01:002010-06-16T11:58:21.721+01:00Nice one Gary.Nice one Gary.Zahid Ghadialyhttps://www.blogger.com/profile/11618208626682295272noreply@blogger.comtag:blogger.com,1999:blog-2349434231090974738.post-54829155189355182962010-06-16T11:54:40.000+01:002010-06-16T11:54:40.000+01:00This is better shown in a class that hides all of ...This is better shown in a class that hides all of its data in a private structure. This allows the class implementer to change the data associated with the class without the caller needing to know or even recompile.<br /><br />Example:-<br /><br />ClassA.h:-<br /> #ifndef _ClassA_h_<br /> #define _ClassA_h_<br /><br /> class ClassA<br /> {<br /> public:<br /> ClassA();<br /> virtual ~ClassA();<br /> bool isFirstCall() const;<br /> private:<br /> struct ClassAPrivateData;<br /> ClassAPrivateData &myData;<br /> };<br /> #endif<br /><br />ClassA.cpp:-<br /> #include "ClassA.h"<br /><br /> struct ClassA::ClassAPrivateData<br /> {<br /> ClassAPrivateData()<br /> : called(false)<br /> {<br /> }<br /> bool called;<br /> };<br /><br /> ClassA::ClassA()<br /> : myData(* new ClassAPrivateData())<br /> {<br /> }<br /><br /> ClassA::~ClassA()<br /> {<br /> delete &myData;<br /> }<br /><br /> bool ClassA::isFirstCall() const<br /> {<br /> if (!myData.called)<br /> {<br /> myData.called = true;<br /> return true;<br /> }<br /> return false;<br /> }<br /><br />main.cpp:-<br /> #include "ClassA.h"<br /> #include <br /><br /> int main()<br /> {<br /> ClassA a;<br /> std::cout << "First Call " << (a.isFirstCall() ? "Yes" : "No") << std::endl;<br /> std::cout << "First Call " << (a.isFirstCall() ? "Yes" : "No") << std::endl;<br /> return 0;<br /> }Gary Clarknoreply@blogger.com