- #include <iostream> 
- #include <memory> 
-   
- class Animals 
- { 
- public: 
- 	virtual void Display() = 0; 
- 	virtual ~Animals() = default; 
- }; 
-   
- class Dog : public Animals 
- { 
- 	void Display() override 
- 	{ 
- 		std::cout << "This is Dog!" << std::endl; 
- 	} 
- }; 
-   
- class Cat : public Animals 
- { 
- 	void Display() override 
- 	{ 
- 		std::cout << "This is Cat!" << std::endl; 
- 	} 
- }; 
-   
- class Goat : public Animals 
- { 
- 	void Display() override 
- 	{ 
- 		std::cout << "This is Goat!" << std::endl; 
- 	} 
- }; 
-   
- int main() 
- { 
- 	Animals* animal = new Dog; 
- 	animal->Display(); 
- 	delete animal; // delete at some point to avoid memory leak as Dog is allocated on the heap 
-   
- 	Cat cat; 
- 	animal = &cat; 
- 	animal->Display(); // no delete needed, as Cat is allocated on the stack and will cleared when goes out of scope 
-   
- 	std::unique_ptr<Animals> animal2 = std::make_unique<Goat>(); 
- 	animal2->Display(); // no delete needed, Goat is allocated on the heap but will be cleared when goes out of scope 
-   
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKY2xhc3MgQW5pbWFscwp7CnB1YmxpYzoKCXZpcnR1YWwgdm9pZCBEaXNwbGF5KCkgPSAwOwoJdmlydHVhbCB+QW5pbWFscygpID0gZGVmYXVsdDsKfTsKCmNsYXNzIERvZyA6IHB1YmxpYyBBbmltYWxzCnsKCXZvaWQgRGlzcGxheSgpIG92ZXJyaWRlCgl7CgkJc3RkOjpjb3V0IDw8ICJUaGlzIGlzIERvZyEiIDw8IHN0ZDo6ZW5kbDsKCX0KfTsKCmNsYXNzIENhdCA6IHB1YmxpYyBBbmltYWxzCnsKCXZvaWQgRGlzcGxheSgpIG92ZXJyaWRlCgl7CgkJc3RkOjpjb3V0IDw8ICJUaGlzIGlzIENhdCEiIDw8IHN0ZDo6ZW5kbDsKCX0KfTsKCmNsYXNzIEdvYXQgOiBwdWJsaWMgQW5pbWFscwp7Cgl2b2lkIERpc3BsYXkoKSBvdmVycmlkZQoJewoJCXN0ZDo6Y291dCA8PCAiVGhpcyBpcyBHb2F0ISIgPDwgc3RkOjplbmRsOwoJfQp9OwoKaW50IG1haW4oKQp7CglBbmltYWxzKiBhbmltYWwgPSBuZXcgRG9nOwoJYW5pbWFsLT5EaXNwbGF5KCk7CglkZWxldGUgYW5pbWFsOyAvLyBkZWxldGUgYXQgc29tZSBwb2ludCB0byBhdm9pZCBtZW1vcnkgbGVhayBhcyBEb2cgaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwCgoJQ2F0IGNhdDsKCWFuaW1hbCA9ICZjYXQ7CglhbmltYWwtPkRpc3BsYXkoKTsgLy8gbm8gZGVsZXRlIG5lZWRlZCwgYXMgQ2F0IGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHdpbGwgY2xlYXJlZCB3aGVuIGdvZXMgb3V0IG9mIHNjb3BlCgoJc3RkOjp1bmlxdWVfcHRyPEFuaW1hbHM+IGFuaW1hbDIgPSBzdGQ6Om1ha2VfdW5pcXVlPEdvYXQ+KCk7CglhbmltYWwyLT5EaXNwbGF5KCk7IC8vIG5vIGRlbGV0ZSBuZWVkZWQsIEdvYXQgaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwIGJ1dCB3aWxsIGJlIGNsZWFyZWQgd2hlbiBnb2VzIG91dCBvZiBzY29wZQoKCXJldHVybiAwOwp9