fork download
  1. #include <iostream>
  2.  
  3. class Number
  4. {
  5. protected:
  6. int magnitude_;
  7. public:
  8. static Number* fromInt(int x);
  9.  
  10. virtual ~Number() {}
  11.  
  12. int getMagnitude() { return magnitude_; }
  13. virtual void print() = 0;
  14. };
  15.  
  16. class PositiveNumber: public Number
  17. {
  18. public:
  19. PositiveNumber(int magnitude) { magnitude_ = magnitude; }
  20. void print() { std::cout << "positive " << magnitude_ << "\n"; }
  21. };
  22.  
  23. class NegativeNumber: public Number
  24. {
  25. public:
  26. NegativeNumber(int magnitude) { magnitude_ = magnitude; }
  27. void print() { std::cout << "negative " << magnitude_ << "\n"; }
  28. };
  29.  
  30. Number* Number::fromInt(int x)
  31. {
  32. if (x >= 0) { return new PositiveNumber(x); }
  33. else { return new NegativeNumber(x); }
  34. }
  35.  
  36. int main (int argc, char* argv[])
  37. {
  38. Number* x = Number::fromInt(5);
  39. x->print();
  40. delete x;
  41.  
  42. x = Number::fromInt(-5);
  43. x->print();
  44. delete x;
  45.  
  46. return 0;
  47. }
Success #stdin #stdout 0s 5640KB
stdin
Standard input is empty
stdout
positive 5
negative -5