预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共38页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
一、继承的概念一、继承的概念1.基类2.派生类或子类派生类也是类可以有自己的数据成员和函数成员派生类又是特殊的类⑴基类的所有成员也是派生类的成员⑵派生类继承了基类所有的成员classbase{public:voidsetA(inta1);private:inta;//私有成员};classderived:publicbase{public:voidsetB(intb1);private:intb;//私有成员};1.Public表示公有继承,特点是:基类的公有成员和保护成员在派生类中保持原有状态,而基类的私有成员仍然是私有的。派生类的成员函数可访问基类中的公有成员和保护成员;派生类的对象仅可以访问基类的公有成员。2.Private表示私有继承,特点是:基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类访问。3.Protected表示保护继承,特点是:基类的公有成员和保护成员都作为派生类的保护成员,而基类的私有成员仍然是私有的。例:#include<iostream.h>classA{public:voidf1();protected:intj1;private:inti1;}classB:publicA{public:voidf2();protected:intj2;private:inti2;}classC:publicB{public:voidf3();}答案:可以访问f1(),而不能访问i1和j1。⑶派生类C中成员函数f3()能否访问基类B中的成员:f2(),i2和j2?能否访问基类A中的成员:f1(),i1和j1?答案:可以访问基类中的成员f2()和间接基类中的f1()和j1,其它的都不能否访问。例:看下面程序的执行结果#include<iostream.h>classTime{public:Time(inthour1,intminute1){hours=hour1;minutes=minute1;}intgethours();intgetminutes();protected:inthours,minutes;};intTime::gethours(){returnhours;}intTime::getminutes(){returnminutes;}classTimex:publicTime{public:Timex(inthour1,intminute1,intsecond1);intgetseconds();protected:intseconds;};Timex::Timex(inthour1,intminute1,intsecond1):Time(hour1,minute1)//派生类构造函数后必须包括向基类传递参数的调用{seconds=second1;}intTimex::getseconds(){returnseconds;}voidmain(){Timetime1(20,30);Timextime2(10,45,34);cout<<time1.gethours()<<":"<<time1.getminutes()<<endl;cout<<time2.gethours()<<":"<<time2.getminutes()<<":"<<time2.getseconds()<<endl;}若类以另一个类的对象作为数据成员,称为组合。例如:#classVehicle{//...}classMotor{//...}classCar:publicVehicle{public:Motormotor;//包含一个公共对象数据成员};voidvehicleFn(Vehicle&v);voidmetorFn(Motor&m);voidmain(){carc;vechileFn(c);//okmotorFn(c);//错误motorFn(c.motor);//ok}通过继承派生类继承基类的数据成员和成员函数,派生类的对象在调用成员函数时相当于调用基类的成员函数。但有时派生类需要一个不同功能且又与基类成员函数同名的成员函数,因此C++允许子类的成员函数重载基类的成员函数。这样在派生类中定义的成员函数就与基类的成员函数同名而不同功能例:看下面的程序#include<iostream.h>classStudent{public:Student(intxx){x=xx;}floatc