code_junkie

Pimpl idiom with inheritance

Nov 13th, 2011
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. class A
  2. {
  3. public:
  4. A(){pAImpl = new AImpl;};
  5. void foo(){pAImpl->foo();};
  6. private:
  7. AImpl* pAImpl;
  8. };
  9. class AImpl
  10. {
  11. public:
  12. void foo(){/*do something*/};
  13. };
  14.  
  15. class B : public A
  16. {
  17. public:
  18. void bar(){pAImpl->bar();}; // Can't do! pAimpl is A's private.
  19. };
  20.  
  21. class BImpl : public AImpl
  22. {
  23. public:
  24. void bar(){/*do something else*/};
  25. };
  26.  
  27. AImpl * const pimpl
  28.  
  29. class A
  30. {
  31. public:
  32. A(bool DoNew = true){
  33. if(DoNew)
  34. pAImpl = new AImpl;
  35. };
  36. void foo(){pAImpl->foo();};
  37. protected:
  38. void SetpAImpl(AImpl* pImpl) {pAImpl = pImpl;};
  39. private:
  40. AImpl* pAImpl;
  41. };
  42. class AImpl
  43. {
  44. public:
  45. void foo(){/*do something*/};
  46. };
  47.  
  48. class B : public A
  49. {
  50. public:
  51. B() : A(false){
  52. pBImpl = new BImpl;
  53. SetpAImpl(pBImpl);
  54. };
  55. void bar(){pBImpl->bar();};
  56. private:
  57. BImpl* pBImpl;
  58. };
  59.  
  60. class BImpl : public AImpl
  61. {
  62. public:
  63. void bar(){/*do something else*/};
  64. };
Add Comment
Please, Sign In to add comment