




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/-/*本例演示通过基类指针自动调用子类的析构函数/*/-#include using namespace std;/-class TBase public: virtual TBase() virtual void Input() virtual void Show();/-class TScore: public TBase /公有派生 private:int *pScores;int HeapSize;int Count;public:TScore()pScores = new int3; Count = 0;HeapSize=3; TScore()coutTScore析构,Count=Countendl; delete pScores; void Input();void Show()system(cls);for(int i=0; iCount; i+) coutpScoresiendl;/-void TScore:Input() int Score; cout输入成绩:Score; if(Count=HeapSize) HeapSize += 3; int *p = new intHeapSize; memcpy(p, pScores, (HeapSize-3) * sizeof(int); delete pScores; pScores = p; pScoresCount+ = Score;/-void fun(TBase *ptr)/普通函数for(int i=0;iInput();ptr-Show();delete ptr;/-void main()/主函数TBase *p;/抽象基类指针,抽象类可以申明指针和引用TScore *Score = new TScore;/声明派生类对象p=Score;/* 考虑到fun中的delete, 此处不能这样做(为什么?) TScore Score; p=&Score; 另:也不能使用默认拷贝构造函数,如: TScore *Score1 = new TScore; *Score1 = *Score;/浅拷贝,析构时将出错 请大家自行尝试上述做法,实际运行效果*/fun(p);/-/-/*1、含有纯虚函数的类是抽象类,也叫纯虚类,可以有成员变量和普通成员函数2、一个类只包含纯虚函数成员,则叫纯抽象类,也叫接口类/*/-#include using namespace std;/-class B0 /抽象基类B0声明,一个类是否是抽象类的判断标准是:是否存在纯虚成员函数 public: /外部接口virtual void display()=0; /纯虚函数成员;/-class B1: public B0 /公有派生 public:void display()coutB1:display()endl; /虚成员函数:必须实现基类的纯虚函数,否则子类也是抽象类了;/-class D1: public B1 /公有派生 public:void display()coutD1:display()display();/-void main()/主函数/B0 p3; /错误:抽象类不能申明对象B0 *p;/抽象基类指针,抽象类可以申明指针和引用B1 b1;/声明派生类对象D1 d1;/声明派生类对象p=&b1;fun(p);/调用派生类B1函数成员p=&d1;fun(p);/调用派生类D1函数成员/-/-/*本例演示接口类的实现,大家可进一步完善TRectangle /*/-#include using namespace std;/-class TShape /接口类 public: virtual double Area()=0; virtual double Perimeter()=0; virtual void ShowArea()=0; virtual void ShowPerimeter()=0; ;/-class TCircle: public TShape /公有派生 private:double R;public:TCircle(double R)this-R = R;virtual double Area()return R * R * 3.1415926; /实现接口类函数Areavirtual double Perimeter()return 2 * R * 3.1415926; /实现接口类函数Areavirtual void ShowArea()cout圆面积: Area()endl; virtual void ShowPerimeter() cout圆周长: Perimeter()ShowArea();ptr-ShowPerimeter();/-void main()/主函数TShape *p;/抽象基类指针,抽象类可以申明指针和引用TCircle c(3);/声明派生类对象p=&c;fun(p);/-/-/*本例演示一个简单异常抛出/*/-#includeusing namespace std;int Div(int x,int y);void main()try cout5/2=Div(5,2)endl; cout8/0=Div(8,0)endl; cout7/1=Div(7,1)endl; catch(int) cout异常 0 作除数鸟.n; int Div(int x,int y)if(y=0) throw y; /抛出异常return x/y;/-/*本例演示一个“复杂”(扩充后,可处理自定义的各类异常)的异常抛出/*/-#include#include /程序里使用了string类型using namespace std;/-class Error /抽象类,目的是为各种处理异常的子类提供一个统一的显示错误信息的接口public : virtual void showErrorMsg()=0;/- class MyExceptionForZero : public Error /Error子类private:string errMsg;public:MyExceptionForZero(string str) : errMsg(str);/构造函数,空函数,但已经初始化了errMsg;/MyExceptionForZero(string str)errMsg = str;void showErrorMsg() couterrMsgendl;/基类纯虚函数的实现;/- int myTest(int i,int j) MyExceptionForZero m(除数为0啦);/声明类MyExceptionForZero的对象 m if (j=0) throw m; /如果除数 i 为 0 ,抛出MyExceptionForZero对象m,其中包含了错误信息“除数为0啦” return i/j;/- void main(int argc, char *argv) int i; int j;cout输入被除数 i 和除数 j:ij; try couti/j=myTest(i,j); catch(Error &e)/此处的参数e是引用型,类型是基类Error,旨在动态绑定到“真正”的处理异常的类 e.showErrorMsg(); /使用显示错误接口 system(pause);/- /-/*本例演示异常处理时的析构,本例关键是理解Demo的析构函数是怎么触发的:当程序抛出异常时(throw)将从对应的try块开始到异常被抛掷处之间构造(且尚未析构)的,所有自动对象进行析构。/*/-#include#include /程序里使用了string类型using namespace std;/-void MyFunc( void );/-class Expt public: Expt(); Expt(); const char *ShowErrInfo() const return Expt类异常。; ;/- class Demo public: Demo(); Demo();/- Demo:Demo() cout构造 Demo.endl;/- Demo:Demo() cout析构 Demo.endl;/- void MyFunc()Demo D; cout在MyFunc()中抛掷Expt类异常。endl; throw Expt();/此处仅仅示例,假设有异常,并抛出/- int main() cout在main函数中。endl; try cout在try块中,调用MyFunc()。 end
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司成型制作养护工岗位工艺作业技术规程
- 船舶木塑工安全操作规程背诵考核试卷及答案
- 2025合同模板设备租赁合同(设备有抵押)范本
- 公司养老护理员安全技术规程
- 2025企业用工劳动合同书
- 2025国际设备采购合同(2)
- 2025梧桐树买卖合同
- 专项法律知识培训合同课件
- 个人之间借款协议书
- 2026届江苏省苏北地区七年级数学第一学期期末复习检测模拟试题含解析
- 河堤护坡方案范本
- 2025机械设备购销合同样本模板
- 农机农艺融合培训课件
- 张掖辅警考试题目及答案
- 绩效考核模板:物流企业客户服务、仓储管理、运输配送绩效指标
- 施工吊篮专项施工方案
- 2025年时事政治考试题库及参考答案(100题)
- 爱笑的虎鲸课件
- 九章怀沙全文课件
- 损失厌恶效应-洞察及研究
- 自闭症中医课件
评论
0/150
提交评论