fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class ClassOne
  6. {
  7. int m_i;
  8. public:
  9. ClassOne(int i = 0) : m_i(i)
  10. { }
  11.  
  12. int I() const { return m_i; }
  13.  
  14. static ClassOne ValueOne;
  15. static ClassOne ValueTwo;
  16. };
  17.  
  18. ClassOne ClassOne::ValueOne = 1;
  19. ClassOne ClassOne::ValueTwo = 2;
  20.  
  21. class ClassTwo
  22. {
  23. char m_c;
  24. ClassOne m_member;
  25.  
  26. private:
  27. ClassTwo(char c = 'A') : m_c(c)
  28. { }
  29. public:
  30. ClassTwo(const ClassOne &member, char c = 'A') : m_c(c), m_member(member)
  31. { }
  32.  
  33. char C() const { return m_c; }
  34. const ClassOne Member() const { return m_member; }
  35.  
  36. static ClassTwo ValueA;
  37. static ClassTwo ValueB;
  38. };
  39.  
  40. ClassTwo ClassTwo::ValueA;
  41. ClassTwo ClassTwo::ValueB;
  42.  
  43. ostream& operator <<(ostream &op1, const ClassTwo &op2)
  44. {
  45. op1 << op2.C() << " containing " << op2.Member().I();
  46. return op1;
  47. }
  48.  
  49. class _LetsInit
  50. {
  51. static bool Init();
  52. static bool _hasInit;
  53. };
  54.  
  55. bool _LetsInit::Init()
  56. {
  57. ClassOne::ValueOne = ClassOne(10);
  58. ClassTwo::ValueA = ClassTwo(ClassOne::ValueOne, 'A');
  59. ClassOne::ValueTwo = ClassOne(20);
  60. ClassTwo::ValueB = ClassTwo(ClassOne::ValueTwo, 'B');
  61. return true;
  62. }
  63.  
  64. bool _LetsInit::_hasInit = _LetsInit::Init();
  65.  
  66. int main()
  67. {
  68. cout << ClassTwo::ValueA << endl;
  69. cout << ClassTwo::ValueB << endl;
  70. return 0;
  71. }
  72.  
Success #stdin #stdout 0s 2724KB
stdin
Standard input is empty
stdout
A containing 10
B containing 20