还剩26页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
派生类与继承导言面向对象编程代码重用12面向对象编程是一种允许程序员创建可重用OOP OOP编程范式,它将程序组织成对的代码模块,这些模块可以在象,每个对象都包含数据和操不同的程序中使用作数据的函数代码维护3使代码更易于维护,因为代码被组织成独立的模块,每个模块负OOP责特定的任务面向对象编程中的类基本构建块代码模板结构化代码类是面向对象编程中的基本构建块类就像蓝图,定义了对象的属性和行为类帮助组织代码,使其更易于维护和扩展类的定义类是对象的蓝图,定义了对象的属性类通过代码实现,定义了对象的行为和方法它们如同设计图纸,指导着和状态它包含数据成员(属性)和对象的创建和行为成员函数(方法)类是面向对象编程的核心概念,它封装了数据和操作,提高了代码的可重用性和可维护性类的构造函数和属性构造函数属性在创建类对象时自动执行的特殊类对象包含的数据成员,代表对函数,用于初始化对象属性象的特征和状态类的方法方法定义方法调用方法参数方法返回值方法是类中的函数,用于执方法可以通过对象来调用,方法可以接受参数,以提供方法可以返回一个值,以表行特定操作它们定义了类例如额外的信息或数据示操作的结果object.method的行为和功能类的访问控制公共访问私有访问保护访问用关键字修饰的成员可以在任何用关键字修饰的成员只能在类的用关键字修饰的成员可以在类public privateprotected地方访问内部访问本身和其派生类中访问类的封装性隐藏内部细节保护数据完整性增强代码可维护性封装性就像一个保险箱,将类的内部数据通过控制外部访问权限,封装性防止意外封装性使代码更易于维护,因为修改内部和方法隐藏起来,只暴露必要的信息或恶意修改类的内部数据实现不会影响外部代码的使用什么是派生类派生类继承优势派生类是一种新类,它继承了另一个继承是面向对象编程的核心概念之一使用派生类可以提高代码的可重用性类的属性和方法,并扩展了其功能,它允许我们创建新的类,并基于现,并减少代码冗余有类的基础进行构建派生类的定义派生类继承从一个已有的类(称为基类或父是面向对象编程的核心概念,它类)继承而来,它拥有基类所有允许我们创建新的类,并继承已属性和方法有类的特征代码复用可扩展性派生类继承了基类,可以避免重派生类可以扩展基类的功能,添复编写代码,提高代码效率加新的属性和方法派生类的构造基类构造1派生类对象的构造函数会自动调用基类的构造函数,为基类部分初始化派生类构造2然后,派生类构造函数会执行自己的初始化工作,为派生类部分初始化成员初始化3最后,派生类构造函数会初始化派生类中定义的成员变量派生类与基类的关系继承关系扩展代码复用派生类继承了基类的所有成员(数据成员派生类可以添加新的数据成员和成员函数继承机制提高了代码复用性,减少重复代和成员函数)码派生类的访问控制继承访问控制基类成员访问派生类继承了基类的访问控制,派生类可以通过基类成员的访问并对其进行了调整级别来访问它们,就像在基类中一样派生类新成员派生类的新成员可以是公有的、受保护的或私有的,不受基类访问控制的影响派生类的方法覆盖覆盖的概念覆盖的用途派生类可以重写基类中定义的方法,这称为方法覆盖覆盖允许派生类提供比基类方法更特定于派生类的实现覆盖方法必须与基类方法具有相同的名称、返回类型和参数列表例如,基类中可能有一个通用的打印方法,而派生类可以提供一个专门针对派生类类型的打印方法抽象类与虚函数抽象类是一种特殊的类,它不能被实虚函数是使用关键字声明的virtual例化,只能被继承成员函数,允许子类重写基类中的方法抽象类的定义无具体实现包含抽象方法抽象类不能直接实例化对象,抽象类可以包含抽象方法,它它们仅作为基类,提供一个公们没有方法体,仅声明方法签共接口给派生类继承名,由子类提供具体实现强制实现抽象类确保派生类必须实现所有抽象方法,从而保证继承层次的一致性抽象类的特点无法实例化包含抽象方法抽象类不能直接创建对象,只能作为其他类的基类抽象类可以包含抽象方法,这些方法没有实现,需要在派生类中实现虚函数及其用途动态绑定多态性12虚函数允许在运行时确定要调通过虚函数,可以实现对不同用的函数,而不是在编译时类型的对象使用相同的接口代码重用3虚函数可以减少代码重复,提高代码可维护性纯虚函数与抽象类纯虚函数抽象类纯虚函数没有函数体,仅声明函数原型,用于强制派生类必须重包含至少一个纯虚函数的类称为抽象类,无法直接实例化,只能写此函数作为基类被继承多重继承多重继承菱形继承虚基类一个类可以从多个基类继承属性和方法多重继承可能导致菱形继承问题造成重复虚基类可以解决菱形继承问题确保每个基.,,继承类只被继承一次..多重继承的语法类名1新派生类2:3基类14基类25基类3多重继承的特点灵活性和代码重用复杂性钻石继承问题多重继承允许类从多个基类继承属性和多重继承可能导致类结构复杂,增加了当一个类从多个基类继承,而这些基类方法,提高代码的灵活性和可重用性代码维护和调试的难度又都继承自同一个祖先类时,就会出现钻石继承问题,需要特殊机制解决菱形继承问题多重继承重复继承菱形继承是多重继承的一种特殊菱形继承会导致子类继承多个祖情况,其中一个子类继承自多个先类中相同成员的多个副本,可父类,而这些父类又共享同一个能导致数据冲突和代码混乱祖先类代码复杂性菱形继承使代码结构变得复杂,难以理解和维护,降低了代码的可读性和可维护性虚基类的解决方案虚基类继承关系通过在基类声明中使用虚基类在派生类中只被实例化一`virtual`关键字,可以创建一个虚基类次,避免了重复代码示例使用修饰基类,确保成员变量只被实例化一次`virtual`派生类与基类的转换类型转换静态转换动态转换派生类对象可以隐式转换为基类对象使用基类指针指向派生类对象,需要显式利用安全地进行转换,避`dynamic_cast`转换免数据丢失静态类型转换编译时确定类型安全12在编译阶段就确定了转换类型编译器会检查类型是否兼容,,例如,将子类指针转换为父以确保转换的安全性和正确性类指针限制3仅能将子类指针转换为父类指针,反之则不行动态类型转换运行时确定对象的实际类型使用运算符`dynamic_cast`可能导致运行时错误总结与思考面向对象编程应用场景派生类与继承是面向对象编程的重要概念,通过继承机制,可以派生类与继承在现实世界中有着广泛的应用,例如,动物类可以实现代码复用、提高开发效率派生出猫类、狗类等。
个人认证
优秀文档
获得点赞 0