欢迎来到天天文库
浏览记录
ID:39174387
大小:214.50 KB
页数:30页
时间:2019-06-26
《C++程序设计(五)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++程序设计(五)内容提要代码重用类的继承多态抽象类多重继承虚拟继承代码重用面向对象程序设计追求的目标之一是代码重用(codereuse)。在C++语言中,类是代码重用的基本单位。在设计和实现类的时侯,应尽可能使其通用,能为多个任务重用。类代码重用的方法之一是组合。即在类中定义对象成员,而对象成员是已存在类的对象。例如已经定义一个描述“引擎”的类,在定义“汽车”类时,可以为汽车类定义一个“引擎”类的对象成员。对象和其对象成员之间的关系是一种“has-a”关系,如:一辆汽车有一个引擎。代码重用在面向
2、对象的程序设计方法中,代码重用的另一种方式是继承。如果新设计的类和已存在的类具有相似的功能和相似的接口,可以通过继承的方式重用已存在的类。例如:定义了“形状”类,则“圆”、“正方形”和“三角形”可以继承“形状”类的特性。在继承关系中,被继承的类称为基类,通过继承关系新建的类称为派生类。派生类和基类之间的关系是“is-a”关系。例如:“圆”是一种“形状”。继承继承意味着派生类继承了基类的所有特性,基类的所有数据成员和成员函数自动成为派生类的数据成员和成员函数。如:“形状”具有位置、大小、颜
3、色等属性,可以移动、绘制等,由其派生出来的“圆”同样有这些属性和操作。派生类不完全等同于基类,派生类可以添加自己特有的特性,即可以为派生类增加新的数据成员和成员函数。如:“圆”有半径,“正方形”有边长或顶点位置等。派生类可以重定义基类中不满足派生类要求的特性,即可以重新定义基类中的成员函数。如:计算“圆”的面积不能直接使用“形状”面积的计算方法。在继承关系中,基类的接口是派生类接口的子集,派生类支持基类所有的公有成员函数。继承派生类的定义方法如下:class派生类的类名:继承类型基类的类名{…}
4、;继承类型有三种:public公有继承protected保护继承private私有继承例子:student.hstudent.cppstudent_test.cpp从类student派生出类graduate_student继承派生类继承了基类的所有数据成员和成员函数,包括静态数据成员和静态成员函数。如:graduate_studentgs(“罗小四”,“0987654321”,“杨振宁”);gs.set_score(98.5);派生类可以增加新的数据成员和成员函数,此时要在派生类中定义这些数据成员和成员
5、函数。如:graduate类中新增了数据成员advisor、title新增了成员函数get_advisor()、set_thesis_title(…)、get_thesis_title()派生类可以重新定义基类中不能满足要求的成员函数。如:graduate类中重新定义了基类中的成员函数display()成员函数的重定义重新定义一个成员函数时,可以调用基类中的旧版成员函数,此时应使用作用域指示符。如:voidgraduate_student::display()const{student::display
6、();cout<<"Advisor:"<7、数,基类中该成员函数及其所有重载版本在派生类中均不再可用。classBase{public:intf();intf(float);...};classDerived2:publicBase{public:intf();};intmain(){floats=10.68;Derived2d2;x=d2.f();d2.f(s);//错误,由于派生类重//新定义了f(),导致基类中的//f(float)不再可用。}参见namehiding.cpp基类中成员在派生类中的可见性派生类中可以存取或调用基类中的保护8、成员和公有成员,但不能存取或调用基类的私有成员。(保护成员和私有成员的区别)classbase{public:voidset(inta,intb,intc);private:intm1;protected:intm2;public:intm3;};classderived:publicbase{public:voidf(){cout<<“m1=”<
7、数,基类中该成员函数及其所有重载版本在派生类中均不再可用。classBase{public:intf();intf(float);...};classDerived2:publicBase{public:intf();};intmain(){floats=10.68;Derived2d2;x=d2.f();d2.f(s);//错误,由于派生类重//新定义了f(),导致基类中的//f(float)不再可用。}参见namehiding.cpp基类中成员在派生类中的可见性派生类中可以存取或调用基类中的保护
8、成员和公有成员,但不能存取或调用基类的私有成员。(保护成员和私有成员的区别)classbase{public:voidset(inta,intb,intc);private:intm1;protected:intm2;public:intm3;};classderived:publicbase{public:voidf(){cout<<“m1=”<
此文档下载收益归作者所有