- 1、本文档共159页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象课件资料
* 纯虚函数与抽象类 * * * * 访问控制 访问控制用于控制基类中声明的名字在多大的范围内能够被派生类的用户访问 访问控制有三种public,protected,private 基类模块 派生类模块 间接派生类模块 其他程序模块 * * 公有继承 * 私有继承 * 在派生类中访问基类成员 * 保护的成员 对V模块是public 对H模块是private * 多继承 可以将其视为单继承来考察,每个基类与派生类的关系可以当做单基继承。 * 8.2构造函数和析构函数 派生类的数据成员由属于基类的部分和属于自己的部分组成,属于基类的部分初始化应由基类的构造函数完成。 构造函数不被继承,派生类必须调用基类的构造函数来初始化属于基类的部分数据成员。 一般形式如下: C::C(参数表0):C1(参数表1),C2(参数表2),…,Cn(参数表n) {…} * 构造函数和析构函数 如果冒号右边的某个基类的构造函数参数表为空,则可以省略该项。 构造对象时,先执行基类的构造函数,然后执行派生类的构造函数。析构时则相反。 多基继承时基类构造函数的执行顺序由继承时的顺序决定(从左向右),与初始化列表中的顺序无关。 * 构造函数和析构函数 * 构造函数和析构函数 * 构造函数和析构函数 * 8.3二义性 如果派生类的一个表达式引用基类中不止一个成员,则存在二义性。 解决二义性的办法是加类限定符。 * 二义性 * 二义性 如果一个派生类是从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的标识符进行访问时可能产生二义性。 * 二义性 B{b} B1{b1} C{f(),d} B{b} B2{b2} * 二义性 * 虚基类 为避免一个基类在多条继承路径上造成在派生类中产生多个基类子对象,可以采用虚基类技术。 语法如下 class B1:virtual public B{} class B2:virtual public B{} class C:public B1,public B2{} 特殊成员函数讨论 拷贝构造函数 赋值 * 拷贝构造函数 用一个对象初始化一个正在建立的同类对象。 拷贝构造函数的参数是引用参数。 每个类都有一个拷贝初始化构造函数 如未定义,则编译器自动生成一个。 功能: 用作为初始值的对象的每个数据成员初始化正建立对象的对应的数据成员。 * 用途 以值调用方式传递参数时 函数返回对象时 * 赋值 当需要进行对象之间的赋值操作时,必须定义赋值操作。 为与习惯一致,一般用作为=赋值操作符 当使用操作符作为函数名时,必须与关键字operator合用。 赋值操作的参数最好用引用方式。 * 赋值操作的参数最好采用引用方式。 赋值操作的最好返回对被赋值对象的引用。 一般形式: X X::operator=(const X p); * 编译器产生的拷贝初始化和赋值操作的缺陷 当类中声明有指针数据成员时,将产生问题。 * 派生类的赋值和初始化 如未定义拷贝构造函数和赋值操作,则编译器提供。 如自定义,则应在实现中调用基类的拷贝构造函数和赋值操作。 * * 8.4 虚函数与多态性 如果类型S是从类型T共有继承的,则称类型S是类型T的子类型。 类型S的指针或引用可以适用于类型T的指针或引用的场合。 * 动态绑定与虚函数 由于在基类和派生类中,相同的名字执行的操作可能不同,所以基类的成员函数在派生类中经常有不同的实现。 用virtual关键字可以实现动态绑定。 动态绑定只适用于虚函数的参数是指针或引用的情况。 * 动态绑定与虚函数 * 动态绑定与虚函数 * 动态绑定与虚函数 * 动态绑定与虚函数 在一个成员函数内调用虚函数时,对该虚函数的调用进行动态绑定。 派生类中虚函数必须满足下列条件: 与基类的函数有相同个数的参数 参数类型相同 返回类型或者与基类相同或者返回指针或引用,且返回的指针或引用的基类型是基类中对应函数所返回的指针或引用的基类型的子类型。 在一个成员函数内调用虚函数时,对该虚函数的调用进行静态绑定。 * 纯虚函数与抽象类 当定义基类时某个虚函数不能给出确定的实现时,可以定义其为纯虚函数。 语法如下 virtual 类型 函数名(参数列表)=0; 具有纯虚函数的类称为抽象类, 抽象类只能用来派生类而不能定义具体的对象。 * 6.2数组和指针 数组:一组类型相同的对象 声明语法: 类型 标识符[元素个数]; 数组元素可以用下标引用 数组名[index]; 数组元素也可以用指针引用 * 数组和指针 通过指针引用数组元素 定义指针对象 数组的地址赋值给指针对象。 指针引用数组元素的方法 *(pointer + n) pointer[n] * 对象数组 没有为数组指定显式初始值时,数组元素使用缺省值初始化,当定义对象数组时,类中必须定
文档评论(0)