fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Variable {
  5. virtual void display() { cout <<"Oops, try to display variable ..."<<endl; }
  6. };
  7. class Number : public Variable {};
  8. class Boolean : public Variable {};
  9. class RealNumber : public Number {};
  10. class IntegerNumber : public Number {
  11. protected:
  12. int val;
  13. public:
  14. IntegerNumber(int v=0): val(v) {}
  15. void display() override { cout <<"Display integer "<<val<<endl; }
  16. };
  17.  
  18. class Virtuality {
  19. public:
  20. virtual void compute_virtual_value() { cout <<"I compute my virtual value...\n"; }
  21. };
  22. class VirtualVariable : public Variable, public Virtuality {};
  23. class VirtualNumber : public Number, public Virtuality {};
  24. class VirtualBoolean : public Boolean, public Virtuality {};
  25. class VirtualRealNumber : public RealNumber, public Virtuality {};
  26. class VirtualIntegerNumber : public IntegerNumber, public Virtuality {
  27. public:
  28. void compute_virtual_value() override { cout <<"I compute my virtual INTEGER value...\n"; val=1000; }
  29. void display() override {
  30. compute_virtual_value();
  31. cout <<"....Display virtual integer "<<val<<endl;
  32. }
  33. };
  34.  
  35. IntegerNumber add (IntegerNumber &a, IntegerNumber&b) {
  36. cout << "add:\n";
  37. cout << " "; a.display();
  38. cout << " "; b.display();
  39. return IntegerNumber(-1); // ok, must be elaborated a little bit more here ;-)
  40. }
  41.  
  42. int main() {
  43. IntegerNumber n(27); // number with an inital value
  44. VirtualIntegerNumber k; // value will be calculated from some formula
  45. add (n, k);
  46.  
  47. return 0;
  48. }
Success #stdin #stdout 0s 3144KB
stdin
Standard input is empty
stdout
add:
   Display integer 27
   I compute my virtual INTEGER value...
....Display virtual integer 1000