欢迎来到天天文库
浏览记录
ID:15885075
大小:52.00 KB
页数:7页
时间:2018-08-06
《第23讲(抽象类和虚析构函数)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第23讲教学内容8.4抽象类8.4.1纯虚函数8.4.2抽象类教学重点和难点1纯虚函数的定义方式,作用2虚析构函数的理解和使用3抽象类的使用场合教学方法:通过程序举例演示,讲解纯虚函数的定义方式,作用,虚析构函数和抽象类的使用场合教学学时2学时教学过程一虚析构函数:1用多态性处理类层次中动态分配的对象时存在一个问题:如果delete运算符用于指向派生类对象的基类指针,但程序中又显式的用该运算符删除每一个对象,那么c++标准会指出这一行为没有定义。这个问题有个简单的解决办法:声明基类析构函数为虚函数,这样,即使所有派生类析构函数不与基类析构函数同名,也可以使这些析构函数为虚函
2、数。现在,如果对基类指针用delete运算符隐式删除了类层次中的某个对象,那么可以基于基类指针所指的对象调用相应的类的析构函数。记住:删除某个派生类后,派生类的基类部分也会被删除,基类析构函数在派生类析构函数之后自动执行。2何时需要虚析构函数?当你可能通过基类指针删除派生类对象时(通过delete),也就是使用基类的指针能够针对不同的对象进行清理工作程序举例:观察下列程序的输出结果#includeusingnamespacestd;classPeople{protected:charm_name[20];public:People(charname[20
3、]){strcpy(m_name,name);cout<<"调用People的构造函数"<4、oplep("小李");Students("小王",20070201);//此时会调用父类和自己本身的构造函数和析构函数,不受virtual的影响*/People*pp;pp=newStudent("小王",20070201);deletepp;//当你可能通过基类指针删除派生类对象时(通过delete),可以使用基类的指针能够针对不同的对象进行清理工作,此时就应该把基类的析构函数设为虚析构函数//可比较基类的析构函数中有无virtual的区别二抽象类:1作用–抽象类为抽象和设计的目的而声明,将有关的数据和行为组织在个继承层次结构中,保证派生类具有要求的行为。–对于暂时无法5、实现的函数,可以声明为纯虚函数,留给派生类去实现。2注意–抽象类只能作为基类来使用。–不能声明抽象类的对象。–构造函数不能是虚函数,析构函数可以是虚函数。3概念:带有纯虚函数的类称为抽象类:,抽象类包含一个或者多个class类名{virtual类型函数名(参数表)=0;//纯虚函数…}程序举例:课后习题8-9请编写抽象类Shape,在此基础上派生出Circle和Rectangle类,两者都有计算对象面积的函数GetArea()和计算周长的函数GetPerim(),从Rectanglelel类派生出Square类#includeusingnamespace6、std;#includeusingnamespacestd;classShape//带有纯虚函数的类叫抽象类{public:virtualdoubleGetArea()=0;//纯虚函数,也就是没有函数体{}virtualdoubleGetPerim()=0;virtualchar*GetName()=0;};classCircle:publicShape{private:intradius;public:Circle(){}Circle(intr):radius(r){}virtualdoubleGetArea(){return3.14*radius*7、radius;}virtualdoubleGetPerim(){return2*3.14*radius;}virtualchar*GetName(){return"圆:";}};classRectangle:publicShape{private:intwidth;intlenth;public:Rectangle(){}Rectangle(intw,inth):width(w),lenth(h){}virtualdoubleGetArea(){returnwidth*lenth;}virtualdoubleGet
4、oplep("小李");Students("小王",20070201);//此时会调用父类和自己本身的构造函数和析构函数,不受virtual的影响*/People*pp;pp=newStudent("小王",20070201);deletepp;//当你可能通过基类指针删除派生类对象时(通过delete),可以使用基类的指针能够针对不同的对象进行清理工作,此时就应该把基类的析构函数设为虚析构函数//可比较基类的析构函数中有无virtual的区别二抽象类:1作用–抽象类为抽象和设计的目的而声明,将有关的数据和行为组织在个继承层次结构中,保证派生类具有要求的行为。–对于暂时无法
5、实现的函数,可以声明为纯虚函数,留给派生类去实现。2注意–抽象类只能作为基类来使用。–不能声明抽象类的对象。–构造函数不能是虚函数,析构函数可以是虚函数。3概念:带有纯虚函数的类称为抽象类:,抽象类包含一个或者多个class类名{virtual类型函数名(参数表)=0;//纯虚函数…}程序举例:课后习题8-9请编写抽象类Shape,在此基础上派生出Circle和Rectangle类,两者都有计算对象面积的函数GetArea()和计算周长的函数GetPerim(),从Rectanglelel类派生出Square类#includeusingnamespace
6、std;#includeusingnamespacestd;classShape//带有纯虚函数的类叫抽象类{public:virtualdoubleGetArea()=0;//纯虚函数,也就是没有函数体{}virtualdoubleGetPerim()=0;virtualchar*GetName()=0;};classCircle:publicShape{private:intradius;public:Circle(){}Circle(intr):radius(r){}virtualdoubleGetArea(){return3.14*radius*
7、radius;}virtualdoubleGetPerim(){return2*3.14*radius;}virtualchar*GetName(){return"圆:";}};classRectangle:publicShape{private:intwidth;intlenth;public:Rectangle(){}Rectangle(intw,inth):width(w),lenth(h){}virtualdoubleGetArea(){returnwidth*lenth;}virtualdoubleGet
此文档下载收益归作者所有