首页 c++继承和多态

c++继承和多态

举报
开通vip

c++继承和多态null第七章 继承与派生*第七章 继承与派生C++语言程序设计本章主要内容*本章主要内容类的继承 类成员的访问控制 单继承与多继承 派生类的构造、析构函数 类成员的标识与访问类的继承与派生*类的继承与派生保持已有类的特性而构造新类的过程称为继承。 在已有类的基础上新增自己的特性而产生新类的过程称为派生。 被继承的已有类称为基类(或父类)。 派生出的新类称为派生类。继承与派生问题举例*继承与派生问题举例类的继承与派生继承与派生问题举例*继承与派生问题举例类的继承与派生猫科继承与派生问题举例*继承与派生问题举...

c++继承和多态
null第七章 继承与派生*第七章 继承与派生C++语言程序设计本章主要内容*本章主要内容类的继承 类成员的访问控制 单继承与多继承 派生类的构造、析构函数 类成员的标识与访问类的继承与派生*类的继承与派生保持已有类的特性而构造新类的过程称为继承。 在已有类的基础上新增自己的特性而产生新类的过程称为派生。 被继承的已有类称为基类(或父类)。 派生出的新类称为派生类。继承与派生问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 举例*继承与派生问题举例类的继承与派生继承与派生问题举例*继承与派生问题举例类的继承与派生猫科继承与派生问题举例*继承与派生问题举例类的继承与派生继承与派生问题举例*继承与派生问题举例类的继承与派生继承与派生的目的*继承与派生的目的继承的目的:实现代码重用。 派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。 类的继承与派生派生类的声明*派生类的声明class 派生类名:继承方式 基类名 { 成员声明; }类的继承与派生继承方式*继承方式不同继承方式的影响主要体现在: 派生类成员对基类成员的访问权限 通过派生类对象对基类成员的访问权限 三种继承方式 公有继承 私有继承 保护继承类成员的访问控制公有继承(public)*公有继承(public)基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问。 派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。 通过派生类的对象只能访问基类的public成员。类成员的访问控制例7-1 公有继承举例*例7-1 公有继承举例class Point //基类Point类的声明 {public: //公有函数成员 void InitP(float xx=0, float yy=0) {X=xx;Y=yy;} void Move(float xOff, float yOff) {X+=xOff;Y+=yOff;} float GetX() {return X;} float GetY() {return Y;} private: //私有数据成员 float X,Y; };类成员的访问控制nullclass Rectangle: public Point //派生类声明 { public: //新增公有函数成员 void InitR(float x, float y, float w, float h) {InitP(x,y);W=w;H=h;}//调用基类公有成员函数 float GetH() {return H;} float GetW() {return W;} private: //新增私有数据成员 float W,H; };*null#include #include using namecpace std; int main() { Rectangle rect; rect.InitR(2,3,20,10); //通过派生类对象访问基类公有成员 rect.Move(3,2); cout< #include using namecpace std; int main() { //通过派生类对象只能访问本类成员 Rectangle rect; rect.InitR(2,3,20,10); rect.Move(3,2); cout< 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 现在: 派生类的对象可以被赋值给基类对象。 派生类的对象可以初始化基类的引用。 指向基类的指针也可以指向派生类。 通过基类对象名、指针只能使用从基类继承的成员类型兼容例7-4 类型兼容规则举例*例7-4 类型兼容规则举例#include using namecpace std; class B0 //基类B0声明 { public: void display(){cout<<"B0::display()"<display(); //"对象指针->成员名" }*nullint main() //主函数 { B0 b0; //声明B0类对象 B1 b1; //声明B1类对象 D1 d1; //声明D1类对象 B0 *p; //声明B0类指针 p=&b0; //B0类指针指向B0类对象 fun(p); p=&b1; //B0类指针指向B1类对象 fun(p); p=&d1; //B0类指针指向D1类对象 fun(p); }运行结果: B0::display() B0::display() B0::display()*基类与派生类的对应关系*基类与派生类的对应关系单继承 派生类只从一个基类派生。 多继承 派生类从多个基类派生。 多重派生 由一个基类派生出多个不同的派生类。 多层派生 派生类又作为基类,继续派生新的类。单继承与多继承多继承时派生类的声明*多继承时派生类的声明class 派生类名:继承方式1 基类名1, 继承方式2 基类名2,... { 成员声明; } 注意:每一个“继承方式”,只用于限制对紧随其后之基类的继承。单继承与多继承多继承举例*多继承举例class A{ public: void setA(int); void showA(); private: int a; }; class B{ public: void setB(int); void showB();private: int b; }; class C : public A, private B{ public: void setC(int, int, int); void showC(); private: int c; };单继承与多继承nullvoid A::setA(int x) { a=x; } void B::setB(int x) { b=x; } void C::setC(int x, int y, int z) { //派生类成员直接访问基类的 //公有成员 setA(x); setB(y); c=z; } //其他函数实现略int main() { C obj; obj.setA(5); obj.showA(); obj.setC(6,7,9); obj.showC(); // obj.setB(6); 错误 // obj.showB(); 错误 return 0; }*继承时的构造函数*继承时的构造函数基类的构造函数不被继承,派生类中需要声明自己的构造函数。 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化,自动调用基类构造函数完成。 派生类的构造函数需要给基类的构造函数传递参数派生类的构造、析构函数单一继承时的构造函数*单一继承时的构造函数派生类名::派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表) { 本类成员初始化赋值语句; };派生类的构造、析构函数单一继承时的构造函数举例*单一继承时的构造函数举例#include using namecpace std; class B{ public: B(); B(int i); ~B(); void Print() const; private: int b; };派生类的构造、析构函数nullB::B() { b=0; cout<<"B's default constructor called."< using namecpace std; class B1 //基类B1,构造函数有参数 {public: B1(int i) {cout<<"constructing B1 "< 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 与一般(无继承关系时)类的析构函数相同。 不需要显式地调用基类的析构函数,系统会自动隐式调用。 析构函数的调用次序与构造函数相反。派生类的构造、析构函数例7-6 派生类析构函数举例*例7-6 派生类析构函数举例派生类的构造、析构函数#include using namecpace std; class B1 //基类B1声明 { public: B1(int i) {cout<<"constructing B1 "< using namecpace std; class B1 //声明基类B1 { public: //外部接口 int nV; void fun() {cout<<"Member of B1"< using namecpace std; class B0 //声明基类B0 { public: //外部接口 int nV; void fun(){cout<<"Member of B0"< using namecpace std; class B0 //声明基类B0 { public: //外部接口 B0(int n){ nV=n;} int nV; void fun(){cout<<"Member of B0"<
本文档为【c++继承和多态】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_546879
暂无简介~
格式:ppt
大小:433KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2011-11-05
浏览量:30