还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
类与对象C++探索中的类和对象概念了解它们在面向对象程序设计中的重要作用掌握C++,类的定义、成员函数、访问控制等核心知识为运用面向对象编程奠定基,C++础简介C++是一种通用编程语言它是语言的扩展支持面向对象编程提供了C++,C C++,类、继承、多态等特性它广泛应用于系统编程、应用程序开发、游戏开发等领域是工业界和学术界使用最广泛的编程语言之一,兼容语言同时增加了面向对象编程的特性使程序更加模块化和可重用C++C,,它提供了强大的内存管理功能同时支持高级数据结构和算法的性能和效,C++率也非常出色在许多领域广受应用,什么是类抽象数据类型自定义数据结构对象的蓝图类是一种抽象数据类型它定义了一组类让程序员可以创建自定义的数据结类就像是对象的蓝图描述了对象应该,,数据及其相关的操作它是对现实世构将数据和方法封装在一起实现数具有的属性和行为每个对象都是类,,界中某类对象的模拟和抽象据抽象的一个实例如何定义一个类类的声明1首先,需要使用关键字来定义一个类,并为其命名类的class定义通常包含在头文件中成员变量2在类内部,我们可以声明类的成员变量,用于存储对象的状态这些变量可以是任意数据类型成员函数3类还可以包含成员函数,这些函数可以访问和操作类的成员变量成员函数可以是普通函数或静态函数类成员函数定义方式访问权限类成员函数可以直接在类内定义类成员函数可以被声明为,或者在类外定义并使用作用域运、或用public privateprotected,算符与类名关联以控制成员的访问权限::调用方式指针this可以使用对象名成员函数或类类成员函数会隐式地传入一个.this名成员函数的方式来调用类成指针指向调用该函数的对象::,员函数类中的访问控制Public类的所有成员都可以被任何函数或对象访问Private类的成员只能在类内部被访问外部对象无法访问,Protected类的成员只能在类内部和子类内部被访问构造函数和析构函数构造函数1在创建对象时自动调用初始化过程2可进行对象属性的赋值析构函数3在对象生命周期结束时自动调用构造函数是在创建对象时自动被调用的特殊成员函数用于初始化对象的属性析构函数则在对象生命周期结束时自动调用常用于释放对,,象占用的资源两者都是类中的重要组成部分合理使用可确保对象的正确创建和销毁,构造函数的重载多种构造方式复杂类型初始化默认参数构建语义化对象类可以根据不同的参数提供多构造函数重载可以方便地处理构造函数也可以使用默认参构造函数重载可以使对象创建种不同的构造函数这样可以对象中包含指针、数组等复杂数进一步增加初始化的灵活更加贴近实际语义提高代码,,满足不同使用场景下的初始化类型的初始化性可读性需求拷贝构造函数对象复制浅拷贝和深拷贝拷贝构造函数定义拷贝构造函数用于创建一个新的对象该对浅拷贝仅复制指针而深拷贝会创建一个全拷贝构造函数是一个特殊的构造函数它接,,,象是现有对象的副本这确保了对象的独立新的对象副本正确的拷贝语义可以避免内受一个同类型的对象引用作为参数用于初,性避免了共享内存带来的风险存泄漏等问题始化新创建的对象,指针this指针概述指针的用途this this中的指针是一个隐藏在成员函数中的特殊指针它指向调通过指针成员函数可以访问对象的数据成员和其他成员函C++this,this,用该成员函数的对象指针使得成员函数能够访问和操作该对数指针还可以用于链式调用成员函数和在构造函数中初始化this this象的数据成员成员变量静态成员静态数据成员静态成员函数访问静态成员静态数据成员属于整个类而不是某个特定静态成员函数不依赖于任何对象实例可直静态成员可以通过对象访问也可以通过类,,,的对象它们在程序生命周期内保持唯一的接通过类名调用它们可以访问类的静态数名访问然而建议使用类名访问因为这样,,值可用于跟踪类级别的信息据成员但不能访问非静态的数据成员可以避免对象的创建和销毁带来的开销,,静态成员函数定义静态成员函数静态成员函数使用关键字定义可以在没有创建对象的情况下调用static,访问静态数据成员静态成员函数可以访问类的静态数据成员但不能访问非静态的数据成员,提高效率静态成员函数没有指针调用时更加高效适用于与特定对象无关的操作this,,友元函数访问权限灵活性通过声明为友元函数该函数可友元函数提供了一种在不改变类,以访问类的私有和保护成员即的定义和成员函数的情况下扩展,使它不是类的成员函数类功能的方式代码组织数据封装友元函数可以将相关的功能集中尽管友元函数可以访问私有成在一起提高代码的可读性和可员但仍然可以保持类的数据封,,维护性装友元类访问权限关系维护友元类可以访问另一个类的所有私有和受保护的成员这提供了通常使用友元类来维护两个类之间的紧密关系如容器类和它所,,更大的灵活性和控制包含的对象类代码组织数据封装友元类可以把相关的功能集中在一起使代码更加模块化和可维尽管友元类能访问私有成员但仍应遵循数据封装原则提供合,,,护适的接口运算符重载定义运算符重载C++允许我们通过重载运算符来自定义对象之间的操作方式,使代码更加简洁易读常见的重载运算符例如+、-、*、/、=、[]、等,可以为自定义类型赋予这些运算符的含义友元函数实现重载通常需要定义为友元函数才能访问类的私有成员,以实现自定义的运算逻辑注意事项运算符重载应遵循运算符的通常含义,并确保操作的结果合乎逻辑滥用可能会让代码难以理解流插入和流提取重载输入流重载1通过重载操作符实现从流中读取数据输出流重载2通过重载操作符实现向流中写入数据自定义类对象3为自定义类重载流插入和流提取操作流插入和流提取重载是面向对象编程中重要的概念通过重载和操作符,开发者可以方便地实现对自定义类对象的输入输出C++操作,大大增强了程序的可读性和易用性这种灵活的扩展性是面向对象设计的一大特点C++继承概念基类与派生类继承的好处继承关系中,基类是被派生类继继承可以实现代码的重用,避免承的父类,派生类是从基类继承重复编写相同的代码,提高开发属性和方法而衍生出来的子类效率和代码的可维护性继承的特点继承层次派生类可以访问基类的公有成员通过多层继承可以形成复杂的继和受保护成员,但无法访问基类承层次结构,实现对复杂问题的的私有成员分层抽象和模拟继承的方式公有继承私有继承1Public2PrivateInheritance Inheritance子类可以访问基类的公有成员子类不能直接访问基类的公有和受保护成员这种继承关系成员和受保护成员只能通过自,最为常见己的公有或保护成员函数访问保护继承3Protected Inheritance子类可以访问基类的公有成员和受保护成员但不能访问基类的私有成,员继承的访问控制公有继承基类的公有成员和保护成员在派生类中保持相同的访问属性保护继承基类的公有成员和保护成员在派生类中变成保护成员私有继承基类的公有成员和保护成员在派生类中变成私有成员多态性概念解释实现方式优势应用场景多态性是面向对象编程的三大多态性通常由虚函数实现子多态性增强了代码的可扩展性多态性广泛应用于程序、,GUI特性之一指同一操作作用于类重写父类的虚函数从而表和可维护性使得程序更加通游戏开发、数据库操作等领,,,不同的对象可以产生不同的结现出不同的行为这种动态绑用和健壮同时也减少了冗余域体现了面向对象编程的强,果这种行为的多样性是多态定机制使得程序更加灵活代码提高了开发效率大功能,性的核心虚函数什么是虚函数虚函数的用途虚函数的实现虚函数是在基类中声明的函数,它可以被派虚函数常用于实现基类指针或引用指向派生通过在基类中声明虚函数并在派生类中重写生类中的同名函数重写这样可以实现多态类对象时的动态绑定可以根据对象的实际实现,可以根据对象的实际类型调用相应的性类型调用相应的函数函数纯虚函数和抽象类纯虚函数抽象类纯虚函数是一种特殊的虚函数它仅有声明而没有定义它强制派抽象类是包含一个或多个纯虚函数的类它不能被实例化只能作,,生类必须实现自己的版本以满足基类的接口要求为基类被继承抽象类定义了一个公共接口派生类必须实现,,虚析构函数确保安全释放资源解决多态性虚析构函数确保在删除基类指针当通过基类指针删除派生类对象指向的对象时能正确调用派生类时若基类没有虚析构函数会导致,,,的析构函数释放对象占用的所有只调用基类的析构函数而无法正,,资源确析构派生类支持动态绑定虚析构函数允许在运行时根据对象的实际类型来调用正确的析构函数实现,动态绑定动态绑定运行时绑定1函数调用在运行时被绑定到正确的实现虚函数调用2基类指针或引用指向派生类对象时调用虚函数,动态类型3对象在运行时确定类型不同于编译时静态类型,动态绑定是面向对象编程的核心特性之一它允许在运行时根据对象的实际类型来调用正确的虚函数实现而不是在编译时根据变量的静态,类型进行绑定这种灵活性使得代码更加可扩展和可复用有助于实现多态性,虚函数表虚函数机制虚函数通过虚函数表实现动态绑定在运行时确定调用的具体函数,继承与多态虚函数是实现多态的重要机制基类的虚函数可被子类重写,内存布局每个包含虚函数的类都有一个虚函数表存储了各个虚函数的地址,多重继承继承多个基类灵活性增强12多重继承允许一个类从多个基多重继承提供了更大的灵活性,类派生从而获得多个基类的成可以根据需求选择合适的功能,员组合管理复杂性二义性问题34随着基类数量的增加多重继承当基类有同名成员时可能会产,,也带来了更复杂的管理和维护生二义性问题需要小心处理,问题菱形继承与虚基类菱形继承结构虚基类机制虚基类的构造和析构菱形继承是一种特殊的多重继承模式子类在虚基类中派生类只继承一份基类成员从虚基类的构造顺序是先执行虚基类构造函,,,同时继承自两个基类这可能会导致命名冲而避免了命名冲突这种方式可以有效地应数再执行派生类构造函数析构顺序则相,,突和歧义虚基类机制可以解决这个问题对菱形继承的复杂性反先析构派生类再析构虚基类,,对象的动态创建和删除动态创建对象1使用关键字可以在运行时动态分配内存并创建对象这样new可以根据程序的需求灵活地创建对象动态删除对象2使用关键字可以在程序结束后释放动态分配的内存空delete间这样可以避免内存泄漏等问题指针管理3创建的对象必须通过指针来管理需要注意指针dynamically的生命周期并确保在不需要时及时删除和操作符new delete动态内存分配操作符12new提供了和操作操作符用于在堆上分配内C++new delete new符用于在程序执行过程中动态存并返回指向新分配对象的指,,地分配和释放内存针操作符注意事项3delete4操作符用于释放分合理使用和可以有deletenewnew delete配的内存防止内存泄漏效管理程序的内存避免资源浪,,费异常处理捕获异常异常的层次结构最佳实践通过语句,可以捕获代码中可能内置了丰富的异常类型层次结构,可合理的异常处理可以提高程序的鲁棒性和可try-catch C++抛出的异常,并进行相应的处理以处理各种类型的异常情况维护性,是编写健壮代码的关键。
个人认证
优秀文档
获得点赞 0