fork download
  1. #include<iostream>
  2. using namespace std;
  3. #include<string>
  4.  
  5. class Expr
  6. {
  7. public:
  8. virtual void print()const =0;
  9. friend ostream& operator<<(ostream &s, const Expr &num)
  10. {
  11. num.print();
  12. return s;
  13. }
  14. };
  15. class NumExpr : public Expr {
  16. public:
  17. NumExpr( string v );
  18. string name();
  19. virtual void print() const
  20. {
  21. cout<<*this;
  22. }
  23.  
  24. private:
  25. int number;
  26. friend ostream& operator<<(ostream &s, const NumExpr &num);
  27. };
  28.  
  29. NumExpr::NumExpr( string n ) {
  30. number = 10;
  31. }
  32. string NumExpr::name() {
  33. return "num";
  34. }
  35. ostream & operator<<(ostream &s, const NumExpr &num) {
  36. s << num.number;
  37. return s;
  38. }
  39. int main()
  40. {
  41. NumExpr* numexpr = new NumExpr("hello");
  42. Expr* expr = numexpr;
  43. cout << *expr;
  44.  
  45.  
  46. return 0;
  47. }
Success #stdin #stdout 0.01s 2856KB
stdin
Standard input is empty
stdout
10