#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
class Animal {
protected:
const char *name;
public:
Animal(const char *name) { this->name = name; }
virtual void play() = 0;
virtual ~Animal() {}
};
class Dog : public Animal {
public:
Dog(const char *name) : Animal(name) {}
void play() {
cout << "わんわん!" << name << "だよ" << endl;
}
virtual ~Dog() {}
};
class Cat : public Animal {
private:
int sleep;
public:
Cat(const char *name, int sleep) : Animal(name) {
this->sleep = sleep;
}
void play() {
cout << "にゃあ!"<< name << "だよ" << endl;
if(sleep == 1) {
cout << "...でも寝る" << endl;
}
}
virtual ~Cat() {}
};
int main(int argc, char *argv[])
{
Animal *pets[] = {
new Dog("ぽち"),
new Cat("たま", 1)
};
for(int i = 0; i < (sizeof pets / sizeof pets[0]); i++) {
pets[i]->play();
}
for(int i = 0; i < (sizeof pets / sizeof pets[0]); i++) {
delete pets[i];
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBBbmltYWwgewpwcm90ZWN0ZWQ6CiAgICBjb25zdCBjaGFyICpuYW1lOwpwdWJsaWM6CiAgICBBbmltYWwoY29uc3QgY2hhciAqbmFtZSkgeyB0aGlzLT5uYW1lID0gbmFtZTsgfQogICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7CiAgICB2aXJ0dWFsIH5BbmltYWwoKSB7fQp9OwoKY2xhc3MgRG9nIDogcHVibGljIEFuaW1hbCB7CnB1YmxpYzoKICAgIERvZyhjb25zdCBjaGFyICpuYW1lKSA6IEFuaW1hbChuYW1lKSB7fQogICAgdm9pZCBwbGF5KCkgewogICAgICAgIGNvdXQgPDwgIuOCj+OCk+OCj+OCk++8gSIgPDwgbmFtZSA8PCAi44Gg44KIIiA8PCBlbmRsOwogICAgfQogICAgdmlydHVhbCB+RG9nKCkge30KfTsKCmNsYXNzIENhdCA6IHB1YmxpYyBBbmltYWwgewogICAgcHJpdmF0ZToKICAgIGludCBzbGVlcDsKICAgIHB1YmxpYzoKICAgIENhdChjb25zdCBjaGFyICpuYW1lLCBpbnQgc2xlZXApIDogQW5pbWFsKG5hbWUpIHsKICAgICAgICB0aGlzLT5zbGVlcCA9IHNsZWVwOwogICAgfQogICAgdm9pZCBwbGF5KCkgewogICAgICAgIGNvdXQgPDwgIuOBq+OCg+OBgu+8gSI8PCBuYW1lIDw8ICLjgaDjgogiIDw8IGVuZGw7CiAgICAgICAgaWYoc2xlZXAgPT0gMSkgewogICAgICAgICAgICBjb3V0IDw8ICIuLi7jgafjgoLlr53jgosiIDw8IGVuZGw7CiAgICAgICAgfQogICAgfQogICAgdmlydHVhbCB+Q2F0KCkge30KfTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAgIEFuaW1hbCAqcGV0c1tdID0gewogICAgICAgIG5ldyBEb2coIuOBveOBoSIpLAogICAgICAgIG5ldyBDYXQoIuOBn+OBviIsIDEpCiAgICB9OwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAoc2l6ZW9mIHBldHMgLyBzaXplb2YgcGV0c1swXSk7IGkrKykgewogICAgICAgIHBldHNbaV0tPnBsYXkoKTsKICAgIH0KCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgKHNpemVvZiBwZXRzIC8gc2l6ZW9mIHBldHNbMF0pOyBpKyspIHsKICAgICAgICBkZWxldGUgcGV0c1tpXTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==