fork download
  1. #include <cstdint>
  2. #include <iostream>
  3.  
  4. /** Base class with virtual interface for initialization.
  5.  *
  6.  * Provides a stable interface for derived classes to override the initialization method.
  7.  * All derived classes must implement the init method with appropriate parameter types.
  8.  */
  9. class BaseInitializer {
  10. public:
  11. BaseInitializer() = default;
  12. virtual ~BaseInitializer() = default;
  13.  
  14. /** Initialize with 32-bit integer parameter.
  15.   *
  16.   * @param value The integer value for initialization.
  17.   */
  18. virtual void init(int32_t value) noexcept {}
  19. };
  20.  
  21. /** Derived class implementing integer-based initialization.
  22.  *
  23.  * Provides a concrete implementation of the initialization interface for integer values.
  24.  */
  25. class IntInitializer final : public BaseInitializer {
  26. public:
  27. IntInitializer() = default;
  28.  
  29. /** Initialize with 32-bit integer parameter.
  30.   *
  31.   * @param value The integer value for initialization.
  32.   */
  33. void init(int32_t value) noexcept override {
  34. std::cout << "IntInitializer::init called with value: " << value << std::endl;
  35. }
  36. };
  37.  
  38. /** Another derived class implementing integer-based initialization.
  39.  *
  40.  * Provides an alternative concrete implementation of the initialization interface.
  41.  */
  42. class AltInitializer final : public BaseInitializer {
  43. public:
  44. AltInitializer() = default;
  45.  
  46. /** Initialize with 32-bit integer parameter.
  47.   *
  48.   * @param value The integer value for initialization.
  49.   */
  50. void init(int32_t value) noexcept override {
  51. std::cout << "AltInitializer::init called with value: " << value << std::endl;
  52. }
  53. };
  54.  
  55. /** Derived class supporting overloaded initialization methods.
  56.  *
  57.  * Provides initialization with both integer and string parameters, demonstrating
  58.  * method overloading in a class hierarchy.
  59.  */
  60. class MultiInitializer final : public BaseInitializer {
  61. public:
  62. MultiInitializer() = default;
  63.  
  64. /** Initialize with 32-bit integer parameter.
  65.   *
  66.   * @param value The integer value for initialization.
  67.   */
  68. void init(int32_t value) noexcept override {
  69. std::cout << "MultiInitializer::init(int32_t) called with value: " << value << std::endl;
  70. }
  71.  
  72. /** Initialize with string parameter.
  73.   *
  74.   * @param text The string value for initialization.
  75.   */
  76. void init(const char * text) noexcept {
  77. std::cout << "MultiInitializer::init(const char*) called with text: " << text << std::endl;
  78. }
  79. };
  80.  
  81. int32_t main() noexcept {
  82. std::cout << "=== Starting initialization demonstration ===" << std::endl;
  83.  
  84. IntInitializer initializer1;
  85. std::cout << "Created IntInitializer" << std::endl;
  86. initializer1.init(10);
  87.  
  88. AltInitializer initializer2;
  89. std::cout << "Created AltInitializer" << std::endl;
  90. initializer2.init(10);
  91.  
  92. MultiInitializer initializer3;
  93. std::cout << "Created MultiInitializer" << std::endl;
  94. initializer3.init(10);
  95. initializer3.init("a");
  96.  
  97. std::cout << "=== Initialization demonstration completed ===" << std::endl;
  98.  
  99. return 0;
  100. }
Success #stdin #stdout 0s 5312KB
stdin
Standard input is empty
stdout
=== Starting initialization demonstration ===
Created IntInitializer
IntInitializer::init called with value: 10
Created AltInitializer
AltInitializer::init called with value: 10
Created MultiInitializer
MultiInitializer::init(int32_t) called with value: 10
MultiInitializer::init(const char*) called with text: a
=== Initialization demonstration completed ===