#include<iostream>
using namespace std;
#include<string>
class Expr
{
public:
virtual void print()const =0;
friend ostream& operator<<(ostream &s, const Expr &num)
{
num.print();
return s;
}
};
class NumExpr : public Expr {
public:
NumExpr( string v );
string name();
virtual void print() const
{
cout<<*this;
}
private:
int number;
friend ostream& operator<<(ostream &s, const NumExpr &num);
};
NumExpr::NumExpr( string n ) {
number = 10;
}
string NumExpr::name() {
return "num";
}
ostream & operator<<(ostream &s, const NumExpr &num) {
s << num.number;
return s;
}
int main()
{
NumExpr* numexpr = new NumExpr("hello");
Expr* expr = numexpr;
cout << *expr;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNpbmNsdWRlPHN0cmluZz4KCmNsYXNzIEV4cHIKewogICAgcHVibGljOgogICAgICAgdmlydHVhbCB2b2lkIHByaW50KCljb25zdCA9MDsKICAgICAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0gJnMsIGNvbnN0IEV4cHIgJm51bSkKICAgICAgIHsKICAgICAgICAgICBudW0ucHJpbnQoKTsKICAgICAgICAgICByZXR1cm4gczsKICAgICAgIH0gIAp9OwpjbGFzcyBOdW1FeHByIDogcHVibGljIEV4cHIgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgTnVtRXhwciggc3RyaW5nIHYgKTsKICAgICAgICAgICAgc3RyaW5nIG5hbWUoKTsKICAgICAgICAgICAgdmlydHVhbCB2b2lkIHByaW50KCkgY29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291dDw8KnRoaXM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgaW50IG51bWJlcjsKICAgICAgICAgICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSAmcywgY29uc3QgTnVtRXhwciAmbnVtKTsKICAgIH07CgogTnVtRXhwcjo6TnVtRXhwciggc3RyaW5nIG4gKSB7CiAgICAgICAgbnVtYmVyID0gMTA7CiAgICB9CiAgICBzdHJpbmcgTnVtRXhwcjo6bmFtZSgpIHsKICAgICAgICByZXR1cm4gIm51bSI7CiAgICB9CiAgICBvc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICZzLCBjb25zdCBOdW1FeHByICZudW0pIHsKICAgICAgICBzIDw8IG51bS5udW1iZXI7CiAgICAgICAgcmV0dXJuIHM7CiAgICB9CmludCBtYWluKCkKewogICAgTnVtRXhwciogbnVtZXhwciA9IG5ldyBOdW1FeHByKCJoZWxsbyIpOyAKICAgIEV4cHIqIGV4cHIgPSBudW1leHByOyAKICAgIGNvdXQgPDwgKmV4cHI7CiAgICAgCgogICAgIHJldHVybiAwOwp9