/******************************************************/
/**************---About 多态与虚函数----------*********/
/**************---Author: Tibruce Zhao---**************/
/**************---Date: 2015/10/5------**************/
/******************************************************/
/********************************关于多态**********************************************
**自行车,汽车,马车各自都有自己的刹车方式,调用车的刹车,使得各自刹车****************
*********************************关于虚函数*******************************************
**构造函数不是虚函数,析构函数可以是虚函数,用new创建时,delete时,调用虚析构函数*****/
/**************************************************************************************/
#include<iostream>
using namespace std;
class Animal
{
public:
Animal(){/*sleep();*/}
virtual ~Animal(){/*shout();*/}
void play(){
eat();
shout();
sleep();
}
//纯虚函数,只是个招牌。
//在Java里称为interface接口,不允许创建抽象类的对象。
virtual void eat()=0; /*{cout<<"eat"<<endl;}*/
virtual void shout()=0; /*{cout<<"shout"<<endl;}*/
virtual void sleep()=0; /*{cout<<"sleep"<<endl;}*/
};
class Horse:public Animal
{
public:
Horse(){cout<<"Horse"<<endl;}
~Horse(){cout<<"Dead Horse"<<endl;}
virtual void eat() {cout<<"Horse eat grass."<<endl;}
virtual void shout() {cout<<"Horse shout."<<endl;}
virtual void sleep() {cout<<"Horse sleep by standing."<<endl;}
};
class Tiger:public Animal
{
public:
Tiger(){cout<<"Tiger"<<endl;}
~Tiger(){cout<<"Dead Tiger"<<endl;}
virtual void eat() {cout<<"Tiger eat meat."<<endl;}
virtual void shout() {cout<<"Tiger shout."<<endl;}
virtual void sleep() {cout<<"Tiger sleep by bending."<<endl;}
};
int main()
{
Animal *p=NULL;
char choice;
cout<<"h--Horse,t--Tiger,Please choose: ";
cin>>choice;
if(choice=='h')
p=new Horse;//new分配内存,在堆里,p在栈里,指向堆里。
else
p=new Tiger;
p->play();
/*只知道p是Animal*,删除Animal的析构。
*若将Animal的析构赋成虚函数,可以运行Tiger和Horse的析构函数*/
//p->Animal::eat();
delete p;
}
【c++程序】 多态与虚函数
最新推荐文章于 2019-12-25 15:54:16 发布