欢迎来到天天文库
浏览记录
ID:57043582
大小:374.50 KB
页数:85页
时间:2020-07-28
《2019年第10讲 类的重用和多态性课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十讲类的重用与多态性教材:《C++语言程序设计》(第4版)第4章4.4,第7章,第8章8.3、8.4清华大学郑莉目录10.1类的组合10.2类的继承与派生10.3访问控制10.4类型兼容规则10.5多态性10.6派生类的构造、析构函数10.7派生类成员的标识与访问10.8小结210.1.1组合类中的成员数据是另一个类的对象。可以在已有抽象的基础上实现更复杂的抽象。310.1类的组合类组合的构造函数设计原则:不仅要负责对本类中的基本类型成员数据赋初值,也要对对象成员初始化。声明形式:类名::类名(对象成员所需的形参,本类成员形参)
2、:对象1(参数),对象2(参数),......{本类初始化}410.1类的组合——10.1.1组合类组合的构造函数调用构造函数调用顺序:先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的构造函数。(析构函数的调用顺序相反)初始化列表中未出现的内嵌对象,用默认构造函数(即无形参的)初始化系统自动生成的隐含的默认构造函数中,内嵌对象全部用默认构造函数初始化510.1类的组合——10.1.1组合例10-1(教材例4-4)类的组合,线段(Line)类//4_4.cpp#include#in
3、cludeusingnamespacestd;classPoint{//Point类定义public:Point(intxx=0,intyy=0){x=xx;y=yy;}Point(Point&p);intgetX(){returnx;}intgetY(){returny;}private:intx,y;};Point::Point(Point&p){//拷贝构造函数的实现x=p.x;y=p.y;cout<<"CallingthecopyconstructorofPoint"<4、.1.1组合//类的组合classLine{//Line类的定义public://外部接口Line(Pointxp1,Pointxp2);Line(Line&l);doublegetLen(){returnlen;}private://私有数据成员Pointp1,p2;//Point类的对象p1,p2doublelen;};//组合类的构造函数Line::Line(Pointxp1,Pointxp2):p1(xp1),p2(xp2){cout<<"CallingconstructorofLine"<5、atic_cast(p1.getX()-p2.getX());doubley=static_cast(p1.getY()-p2.getY());len=sqrt(x*x+y*y);}Line::Line(Line&l):p1(l.p1),p2(l.p2){//组合类的拷贝构造函数cout<<"CallingthecopyconstructorofLine"<6、),myp2(4,5);//建立Point类的对象Lineline(myp1,myp2);//建立Line类的对象Lineline2(line);//利用拷贝构造函数建立一个新对象cout<<"Thelengthofthelineis:";cout<7、ctorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingconstructorofLineCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofLineThelengthofthelineis:5Thelengthoftheline2i8、s:510.1.2前向引用声明类应该先声明,后使用如果需要在某个类的声明之前,引用该类,则应进行前向引用声明。前向引用声明只为程序引入一个标识符,但具体声明在其他地方。910.1类的组合举例classB;//前向引用声明classA{public:
4、.1.1组合//类的组合classLine{//Line类的定义public://外部接口Line(Pointxp1,Pointxp2);Line(Line&l);doublegetLen(){returnlen;}private://私有数据成员Pointp1,p2;//Point类的对象p1,p2doublelen;};//组合类的构造函数Line::Line(Pointxp1,Pointxp2):p1(xp1),p2(xp2){cout<<"CallingconstructorofLine"<5、atic_cast(p1.getX()-p2.getX());doubley=static_cast(p1.getY()-p2.getY());len=sqrt(x*x+y*y);}Line::Line(Line&l):p1(l.p1),p2(l.p2){//组合类的拷贝构造函数cout<<"CallingthecopyconstructorofLine"<6、),myp2(4,5);//建立Point类的对象Lineline(myp1,myp2);//建立Line类的对象Lineline2(line);//利用拷贝构造函数建立一个新对象cout<<"Thelengthofthelineis:";cout<7、ctorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingconstructorofLineCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofLineThelengthofthelineis:5Thelengthoftheline2i8、s:510.1.2前向引用声明类应该先声明,后使用如果需要在某个类的声明之前,引用该类,则应进行前向引用声明。前向引用声明只为程序引入一个标识符,但具体声明在其他地方。910.1类的组合举例classB;//前向引用声明classA{public:
5、atic_cast(p1.getX()-p2.getX());doubley=static_cast(p1.getY()-p2.getY());len=sqrt(x*x+y*y);}Line::Line(Line&l):p1(l.p1),p2(l.p2){//组合类的拷贝构造函数cout<<"CallingthecopyconstructorofLine"<6、),myp2(4,5);//建立Point类的对象Lineline(myp1,myp2);//建立Line类的对象Lineline2(line);//利用拷贝构造函数建立一个新对象cout<<"Thelengthofthelineis:";cout<7、ctorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingconstructorofLineCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofLineThelengthofthelineis:5Thelengthoftheline2i8、s:510.1.2前向引用声明类应该先声明,后使用如果需要在某个类的声明之前,引用该类,则应进行前向引用声明。前向引用声明只为程序引入一个标识符,但具体声明在其他地方。910.1类的组合举例classB;//前向引用声明classA{public:
6、),myp2(4,5);//建立Point类的对象Lineline(myp1,myp2);//建立Line类的对象Lineline2(line);//利用拷贝构造函数建立一个新对象cout<<"Thelengthofthelineis:";cout<7、ctorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingconstructorofLineCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofLineThelengthofthelineis:5Thelengthoftheline2i8、s:510.1.2前向引用声明类应该先声明,后使用如果需要在某个类的声明之前,引用该类,则应进行前向引用声明。前向引用声明只为程序引入一个标识符,但具体声明在其他地方。910.1类的组合举例classB;//前向引用声明classA{public:
7、ctorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingconstructorofLineCallingthecopyconstructorofPointCallingthecopyconstructorofPointCallingthecopyconstructorofLineThelengthofthelineis:5Thelengthoftheline2i
8、s:510.1.2前向引用声明类应该先声明,后使用如果需要在某个类的声明之前,引用该类,则应进行前向引用声明。前向引用声明只为程序引入一个标识符,但具体声明在其他地方。910.1类的组合举例classB;//前向引用声明classA{public:
此文档下载收益归作者所有