C++程序设计 教学课件 作者 郑莉第10章类的重用.ppt

C++程序设计 教学课件 作者 郑莉第10章类的重用.ppt

ID:50318761

大小:890.00 KB

页数:84页

时间:2020-03-08

C++程序设计 教学课件 作者 郑莉第10章类的重用.ppt_第1页
C++程序设计 教学课件 作者 郑莉第10章类的重用.ppt_第2页
C++程序设计 教学课件 作者 郑莉第10章类的重用.ppt_第3页
C++程序设计 教学课件 作者 郑莉第10章类的重用.ppt_第4页
C++程序设计 教学课件 作者 郑莉第10章类的重用.ppt_第5页
资源描述:

《C++程序设计 教学课件 作者 郑莉第10章类的重用.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1第10章类的重用清华大学郑莉2目录10.1类的组合10.2继承与派生10.3虚继承310.1类的组合类的组合一个类的对象作为另一个类的数据成员的情况,他们之间的关系是一种包含与被包含的关系例如,一个三角形包含三个顶点,三角形和顶点之间的关系是包含与被包含的关系。我们在对三角形抽象时,得到的属性就是三个顶点。在对顶点抽象时,得到的属性是x和y坐标。因此,对顶点可以定义一个Point类,其数据成员包含x和y坐标,对三角形可以定义Triangle类,其数据成员是三个Point类的对象。这样,类Triangle就使用了类Point。410.1.1对象成员的初始化当创建类的对象(称为复杂

2、对象)时,如果这个类具有其他类的对象(称为内嵌对象)成员,那么先创建这些内嵌对象,然后再创建复杂对象在创建对象时,既要对本类的基本类型数据成员进行初始化,也要对内嵌对象成员初始化10.1类的组合510.1.1对象成员的初始化组合类构造函数的一般定义格式如下:类名::类名(形参表):内嵌对象(形参表),内嵌对象(形参表),...{类的初始化}这里,“内嵌对象(形参表),内嵌对象(形参表),...”称为初始化列表。使用初始化列表的特点是效率要比赋值语句高。如果通过初始化列表对内嵌对象初始化,则实质是通过调用内嵌对象的构造函数对内嵌对象初始化对基本数据类型也可以使用初始化列表初始化如果

3、在构造组合类的对象时,不使用初始化列表对内嵌对象初始化,则会自动调用内嵌对象类的默认构造函数10.1类的组合610.1.1对象成员的初始化通过初始化列表对内嵌对象初始化时,构造函数的调用顺序是:调用内嵌对象的构造函数,调用顺序为内嵌对象在组合类的定义中出现的顺序执行组合类的构造函数当不使用初始化列表对内嵌对象时,构造函数的调用顺序是:调用内嵌对象的默认构造函数,调用顺序为内嵌对象在组合类的定义中出现的顺序执行组合类的构造函数析构函数的调用执行顺序与构造函数相反10.1类的组合710.1.1对象成员的初始化组合类的拷贝构造函数,如果程序员没有编写组合类的拷贝构造函数,则会调用组合类

4、的默认拷贝构造函数,而且会自动调用内嵌对象的默认拷贝构造函数例如,假设类C包含类B的对象为数据成员,则类C的拷贝构造函数可以这样写:C::C(C&c1):b(c1.b){...}10.1类的组合810.1.1对象成员的初始化例10-1组合类的构造函数10.1类的组合classPoint{//Point类定义public://外部接口Point(floatx1=0.0f,floaty1=0.0f){x=x1;y=y1;cout<<"Point类的构造函数被调用,x="<

5、t{returnx;}floatGetY()const{returny;}friendfloatdis(constPoint&a,constPoint&b);//声明友元函数private://私有数据成员floatx;floaty;};910.1.1对象成员的初始化Point::Point(Point&p){//Point的拷贝构造函数x=p.x;y=p.y;cout<<"Point类的拷贝构造函数被调用,x="<

6、tPoint&b){//定义友元函数floatx=a.x-b.x;//在友元函数中,可以访问对象的私有成员floaty=a.y-b.y;floatdis2=x*x+y*y;returnsqrt(dis2);}10.1类的组合1010.1.1对象成员的初始化classTriangle{public:Triangle(Pointxp1,Pointxp2,Pointxp3);Triangle(Triangle&t);floatGetArea(){returnarea;}private:Pointp1,p2,p3;//Triangle类的数据成员,是Point类的对象floatarea;

7、};10.1类的组合1110.1.1对象成员的初始化//组合类的构造函数Triangle::Triangle(Pointxp1,Pointxp2,Pointxp3){p1.Init(xp1);p2.Init(xp2);p3.Init(xp3);floatd1=dis(p1,p2);floatd2=dis(p2,p3);floatd3=dis(p3,p1);//利用S^2=p(p-a)(p-b)(p-c),p为周长的一半计算floatp=(d1+d2+d3)/2;floatarea

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。