还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
面向对象程序设计继承与派生本课件主要讲解面向对象编程中继承与派生的概念,以及其在代码复用和代码组织方面的应用什么是继承和派生?继承派生继承是一种创建新类(派生类)派生类是通过继承基类创建的,的方式,它会从现有的类(基类它拥有基类的所有属性和方法,)中继承属性和方法同时可以添加新的属性和方法关系继承和派生是一种关系,例如猫是一种动物,猫继承了动物的属性“is a”和方法继承的概念代码复用代码组织继承是一种面向对象编程中的重要机制,它允许创建新的类(子继承可以将代码结构组织得更加清晰,便于理解和维护类)并从现有类(父类)继承属性和方法例如,可以将不同的功能模块抽象成不同的类,并通过继承关系通过继承,子类可以重用父类已有的代码,减少重复编写代码的进行组织,使代码更加模块化工作量,提高代码的可维护性和可扩展性为什么需要继承代码复用代码维护代码组织继承可以重用父类代码,减少重复代码,提继承有助于集中管理代码,修改父类代码会继承可以构建类的层次结构,使代码更清晰高开发效率自动影响子类,方便维护,易于理解和管理继承的特点代码重用代码扩展12继承可以有效地减少代码冗余继承可以扩展已有的类,添加,提高代码复用率新的功能和属性多态性类型安全34继承是实现多态性的基础,可继承可以确保子类具有父类的以使程序更加灵活和可扩展特性,提高代码的安全性继承的基本语法类名继承父类名子类继承父类,使用冒号()和继承关键字、或,例如子类名:public protectedprivate class:父类名{...}访问权限控制符继承访问控制符决定子类对父类成员的访问权限,包括、和public protectedprivate成员函数重写子类可以重写父类的成员函数,实现相同功能的不同实现例如函数名virtual void{...}构造函数子类需要调用父类的构造函数来初始化继承的成员,使用冒号()和父类构造函数名,例如子类:名参数父类名参数:{...}单继承单继承代码示例一个子类只能继承自一个父类,子类子类继承父类,并添加自己的属性和只能获得父类的属性和方法方法多继承多个父类复杂关系
1.
2.12一个子类可以继承多个父类,多继承可以实现更复杂的继承从而获得多个父类的属性和方关系,例如一个类可以同时继法承动物和植物的特点“”“”钻石问题
3.3多继承会导致钻石问题,即当多个父类都继承自同一个祖先类时,子“”类可能会出现属性和方法的冲突继承的实现原理代码复用1继承是实现代码复用的重要机制派生类2派生类继承基类的属性和方法内存分配3派生类对象包含基类对象的成员成员访问4派生类对象可以使用基类成员继承通过在派生类中创建基类的副本来实现代码复用派生类继承了基类的属性和方法,并可以添加自己的特性在内存中,派生类对象包含基类对象的成员,允许派生类对象访问基类成员派生的概念派生类基类派生类是对基类的一种扩展,并继承了基类的属性和方法基类是派生类的基础,提供了一组通用的属性和方法,供派生类继承和扩展派生的特点代码复用扩展功能派生类可以继承基类的属性和方派生类可以添加新的成员变量和法,减少重复代码编写,提高代方法,扩展基类的功能,实现更码效率复杂的应用代码组织多态性派生类可以将代码组织成层次结派生类可以实现多态性,通过同构,提高代码可读性和可维护性一个接口调用不同的方法,实现不同的功能派生的基本语法派生类名继承方式基类名class:1定义派生类派生类名对象名;2创建派生类对象对象名成员函数名参数.;3访问成员函数派生类的语法基于继承方式、基类名和派生类名定义派生类并创建对象后,可以使用对象访问成员函数这些语法规则使派生类能够继承基类的属性和行为,并在此基础上进行扩展和定制私有继承访问限制代码隐藏安全性基类成员在派生类中不可访问派生类无法直接使用基类成员,提高代码封防止派生类误用基类成员,提高程序安全性装性保护继承访问权限应用场景保护继承允许派生类访问基类的保护成员保护继承常用于创建库或框架,使派生类,但不能直接访问基类的私有成员能够访问基类的受保护成员,但防止外部代码直接访问派生类的成员函数可以访问基类的保护成员,但派生类对象本身不能访问这有助于维护代码的封装性,并确保派生类能够正确地使用基类的功能公有继承访问权限继承关系代码示例基类成员在派生类中保持相同的访问权限派生类可以访问基类的所有公有成员通过使用冒号和关键字表示继承关public系虚函数动态绑定多态实现虚函数在运行时根据对象类型进虚函数是实现多态性的关键机制行动态绑定,允许不同对象类型以统一的方式进行调用基类定义子类重写在基类中使用关键字声明派生类可以根据需要重写基类的virtual虚函数,使其在派生类中可以被虚函数,以实现不同的行为重写纯虚函数定义语法作用举例纯虚函数是在基类中声明但没在函数声明后面添加纯虚函数用于定义接口,让派例如,一个抽象的类=0Shape有定义的函数它用来例如生类必须实现它纯虚函数不可以定义一个纯虚函数=0virtual voidfunc=0;标记纯虚函数的目的是强制能被调用,它只是为了定义接,让所有派生类(getArea派生类实现该函数,以确保多口而存在如、)都必须实Circle Square态行为现自己的函数getArea抽象类抽象类是不能被实例化的类包含一个或多个纯虚函数作为其他类的基础或模板定义了子类的共同行为和属性接口概述抽象类型规范行为12接口是一种抽象类型,不包含数据成员接口定义了类应该提供哪些方法,以及,只包含纯虚函数它描述的是一组行这些方法的调用方式,但并不提供具体为,而不是具体实现的实现细节实现与继承多态性34任何类可以实现一个接口,实现接口的接口支持多态性,不同类可以实现同一类需要提供接口中所有纯虚函数的具体个接口,使用同一个接口进行操作实现接口的特点抽象定义多重继承灵活设计多态实现接口只定义方法,不实现类一个类可以实现多个接口,方接口提供了一种灵活的设计方通过接口,可以实现多态性,似于合同,规定方法名称、参便扩展功能,避免单继承的限式,可以通过实现不同的接口即用同一接口调用不同的实现数和返回值,但不提供具体实制来实现相同的功能,增强代码,提高代码可复用性现可维护性接口的语法接口定义实现接口使用关键字定义接口,定义接口的成员使用关键字实现接口,并实现接口中的所有抽象方法interface implements123成员类型接口成员只能是抽象方法,不能有成员变量或具体方法抽象类与接口的区别抽象类接口可以包含数据成员和成员函数,只包含抽象方法,不能包含数据并且成员函数可以有实现成员,也不能实现成员函数应用场景抽象类用于定义公共接口,并提供部分实现接口用于定义规范,没有实现多态的概念多种形态代码复用同一个操作,在不同的对象上表现出不同的行通过多态,减少代码重复,提高代码可读性为灵活性设计原则允许程序在运行时根据对象类型执行不同的操多态是面向对象编程的重要设计原则之一作多态的表现形式编译时多态运行时多态
1.
2.12编译时多态,也称为静态多态运行时多态,也称为动态多态,在编译阶段就确定了要调用,在运行阶段才能确定要调用的函数,常见于函数重载的函数,常见于虚函数和继承重载覆盖
3.
4.34重载是指在同一作用域中,允覆盖是指在派生类中重新定义许存在多个同名函数,但函数基类的虚函数,它们具有相同的参数列表不同的函数名和参数列表虚函数与多态虚函数多态虚函数允许子类重新定义基类的行为它多态是指同一操作在不同对象上表现出不使用关键字声明在基类中,虚同的行为通过虚函数,我们可以实现运virtual函数是一个占位符,具体实现由子类决定行时多态子类可以根据具体情况重写基类的虚函数动态绑定运行时确定虚函数表多态性基础动态绑定,也称为后期绑定,是指在程序运通过虚函数表实现,记录了每个对象类型对动态绑定是实现多态性的重要机制,让代码行时才确定要调用的函数应的方法地址更灵活、易于扩展应用场景分析面向对象编程图形界面设计继承与派生是面向对象编程的核心概念,广泛应用于软件开发的继承与派生在图形界面设计中也有重要的应用,可以用于创建各各个方面种类型的窗口、按钮和菜单例如,在游戏开发中,可以利用继承来创建不同类型的角色,例例如,可以从一个基础按钮类派生出不同的按钮类型,例如文本如玩家、敌人和非玩家角色按钮、图片按钮和下拉菜单按钮继承与派生的注意事项避免循环继承避免多重继承
1.
2.12循环继承会导致死循环,导致多重继承容易造成继承关系混程序崩溃例如,类继承类乱,维护难度大建议使用接A B,类继承类,会造成循环继口代替多重继承B A承注意继承的访问权限避免滥用继承
3.
4.34继承应该用于代码复用,而不私有继承只允许派生类访问基是实现功能如果两个类之间类的私有成员,保护继承允许没有关系,则不建议使“is-a”派生类和子类访问基类的保护用继承成员,公有继承允许所有类访问基类的公有成员本课程小结本课程深入讲解了继承和派生的概念、特点、语法及应用场景重点介绍了继承与派生的关系,以及虚函数、抽象类和接口等重要概念。
个人认证
优秀文档
获得点赞 0