class BwColour : SomeAbstractBaseClass { public: BwColour(int test); BwColour(char test); BwColour(int test, int tester); } class GreyColour : SomeAbstractBaseClass { public: GreyColour(); GreyColour(string text); } class StoreNumbers { public: StoreNumbers(); StoreNumbers(string text); StoreNumbers(int test); StoreNumbers(char test); StoreNumbers(int test, int tester); private: SomeAbstractBaseClass const* const mOne; SomeAbstractBaseClass const* const mTwo; SomeAbstractBaseClass const* const mThree; SomeAbstractBaseClass const* const mFour; SomeAbstractBaseClass const* const mFive; // ... // up to "mNine" } StoreNumbers::StoreNumbers(int test) : mOne ( new BwColour(int test) ), mTwo ( new BwColour(int test) ), mThree ( new BwColour(int test ) // ... // up to "mNine" {} StoreNumbers::StoreNumbers() : mOne ( new GreyColour() ), mTwo ( new GreyColour() ), mThree ( new GreyColour() ) // ... // up to "mNine" {} // ... // implementation of the remaining four ctors out of // BwColour and GreyColour, each initialising // mOne through mNine class StoreCharacters { public: StoreCharacters(); StoreCharacters(string text); StoreCharacters(int test); StoreCharacters(char test); StoreCharacters(int test, int tester); private: SomeAbstractBaseClass const* const mCharA; SomeAbstractBaseClass const* const mCharB; SomeAbstractBaseClass const* const mCharC; SomeAbstractBaseClass const* const mCharD; // ... // up to "mCharZ" } StoreCharacters::StoreCharacters(int test) : mCharA ( new BwColour(int test) ) // ... // up to "mCharZ" {} StoreCharacters::StoreCharacters() : mCharA ( new GreyColour() ) // ... // up to "mCharZ" {} // ... // implementation of the remaining four ctors out of // BwColour and GreyColour, each initialising // mCharA through mCharZ