多态二和异常处理示例.docx
- 文档编号:3023110
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:11
- 大小:16.95KB
多态二和异常处理示例.docx
《多态二和异常处理示例.docx》由会员分享,可在线阅读,更多相关《多态二和异常处理示例.docx(11页珍藏版)》请在冰豆网上搜索。
多态二和异常处理示例
//---------------------------------------------------------------
/****************************************************************
本例演示通过基类指针自动调用子类的析构函数
/****************************************************************/
//---------------------------------------------------------------
#include
usingnamespacestd;
//---------------------------------------------------------------
classTBase
{
public:
virtual~TBase(){}
virtualvoidInput(){}
virtualvoidShow(){}
};
//---------------------------------------------------------------
classTScore:
publicTBase//公有派生
{
private:
int*pScores;
intHeapSize;
intCount;
public:
TScore(){pScores=newint[3];Count=0;HeapSize=3;}
~TScore(){cout<<"TScore析构,Count="< voidInput(); voidShow(){system("cls");for(inti=0;i }; //--------------------------------------------------------------- voidTScore: : Input() { intScore; cout<<"输入成绩: "< cin>>Score; if(Count>=HeapSize) { HeapSize+=3; int*p=newint[HeapSize]; memcpy(p,pScores,(HeapSize-3)*sizeof(int)); deletepScores; pScores=p; } pScores[Count++]=Score; } //--------------------------------------------------------------- voidfun(TBase*ptr)//普通函数 { for(inti=0;i<5;i++) ptr->Input(); ptr->Show(); deleteptr; } //--------------------------------------------------------------- voidmain()//主函数 { TBase*p;//抽象基类指针,抽象类可以申明指针和引用 TScore*Score=newTScore;//声明派生类对象 p=Score; /*考虑到fun中的delete,此处不能这样做(为什么? ) TScoreScore; p=&Score; 另: 也不能使用默认拷贝构造函数,如: TScore*Score1=newTScore; *Score1=*Score;//浅拷贝,析构时将出错 请大家自行尝试上述做法,实际运行效果 */ fun(p); } //--------------------------------------------------------------- //--------------------------------------------------------------- /**************************************************************** 1、含有纯虚函数的类是抽象类,也叫纯虚类,可以有成员变量和普通成员函数 2、一个类只包含纯虚函数成员,则叫纯抽象类,也叫接口类 /****************************************************************/ //--------------------------------------------------------------- #include usingnamespacestd; //--------------------------------------------------------------- classB0//抽象基类B0声明,一个类是否是抽象类的判断标准是: 是否存在纯虚成员函数 {public: //外部接口 virtualvoiddisplay()=0;//纯虚函数成员 }; //--------------------------------------------------------------- classB1: publicB0//公有派生 {public: voiddisplay(){cout<<"B1: : display()"< 必须实现基类的纯虚函数,否则子类也是抽象类了 }; //--------------------------------------------------------------- classD1: publicB1//公有派生 {public: voiddisplay(){cout<<"D1: : display()"< }; //--------------------------------------------------------------- voidfun(B0*ptr)//普通函数 {ptr->display();} //--------------------------------------------------------------- voidmain()//主函数 { //B0p3;//错误: 抽象类不能申明对象 B0*p;//抽象基类指针,抽象类可以申明指针和引用 B1b1;//声明派生类对象 D1d1;//声明派生类对象 p=&b1; fun(p);//调用派生类B1函数成员 p=&d1; fun(p);//调用派生类D1函数成员 } //--------------------------------------------------------------- //--------------------------------------------------------------- /**************************************************************** 本例演示接口类的实现,大家可进一步完善TRectangle /****************************************************************/ //--------------------------------------------------------------- #include usingnamespacestd; //--------------------------------------------------------------- classTShape//接口类 { public: virtualdoubleArea()=0; virtualdoublePerimeter()=0; virtualvoidShowArea()=0; virtualvoidShowPerimeter()=0; }; //--------------------------------------------------------------- classTCircle: publicTShape//公有派生 { private: doubleR; public: TCircle(doubleR){this->R=R;} virtualdoubleArea(){returnR*R*3.1415926;}//实现接口类函数Area virtualdoublePerimeter(){return2*R*3.1415926;}//实现接口类函数Area virtualvoidShowArea(){cout<<"圆面积: "< virtualvoidShowPerimeter(){cout<<"圆周长: "< }; //--------------------------------------------------------------- //classTRectangle: publicTShape//公有派生 //{ //} //--------------------------------------------------------------- voidfun(TShape*ptr)//普通函数 { ptr->ShowArea(); ptr->ShowPerimeter(); } //--------------------------------------------------------------- voidmain()//主函数 { TShape*p;//抽象基类指针,抽象类可以申明指针和引用 TCirclec(3);//声明派生类对象 p=&c; fun(p); } //--------------------------------------------------------------- //--------------------------------------------------------------- /**************************************************************** 本例演示一个简单异常抛出 /****************************************************************/ //--------------------------------------------------------------- #include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多态二 异常 处理 示例
![提示](https://static.bdocx.com/images/bang_tan.gif)