还剩29页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
类与对象C++是一种面向对象编程语言,其核心概念之一是类与对象C++类是对象的蓝图,定义了对象的行为和属性对象是类的实例,拥有类定义的属性和行为什么是类和对象类蓝图对象实例类是对象的模板,它描述了一组对象是类的具体实例,它拥有类对象共有的属性和行为定义的属性和行为关系模板与实例类就像一个蓝图,而对象则是根据蓝图创建出来的实际物件类的定义语法示例类定义使用关键字开始,后面跟着类名和一对花括号classclass Dog{花括号内包含类的成员变量和成员函数的声明public:void bark;private:int age;};成员变量和成员函数成员变量成员函数
1.
2.12成员变量是类内部定义的变量成员函数是类内部定义的函数,它们表示对象的状态或属性,它们定义了对象的行为或操作访问成员变量和成员类和对象的本质
3.
4.34函数类是对象的模板,对象是类的通过对象名和点运算符可以访实例,它包含了成员变量和成问类的成员变量和成员函数员函数访问控制符、和:public privateprotectedpublic类成员对所有用户公开访问private类成员仅对类本身可见,外部无法访问protected类成员对自身和其子类可见,外部无法访问构造函数和析构函数构造函数1对象创建时自动调用初始化成员变量2确保对象处于有效状态析构函数3对象销毁时自动调用释放资源4清理对象占用的内存和资源构造函数用于在对象创建时初始化其成员变量,确保对象处于有效状态析构函数在对象销毁时被调用,用于释放对象占用的内存和资源它们是类中特殊成员函数,分别在对象的创建和销毁阶段自动执行,为对象的生命周期提供了重要的保障深入理解构造函数初始化成员保证对象状态定制对象初始化构造函数在对象创建时被自动调用,用于构造函数确保对象在创建时处于一致和有通过构造函数参数,可以为不同场景创建初始化对象的成员变量效的状态,避免潜在的错误具有不同初始值的同一个类型的对象重载构造函数多个构造函数灵活初始化代码示例允许创建不同的对象实例根据具体情况选择合适的构造函数演示构造函数重载的使用不同参数类型简化对象创建参数列表差异•••不同参数数量提高代码可读性初始化方式不同•••拷贝构造函数定义作用拷贝构造函数用于创建新对象,并将其用于避免对象复制过程中数据丢失或错初始化为现有对象的副本误它接受一个同类类型的常量引用作为参允许创建对象副本,以便在需要时使用数赋值运算符重载赋值运算符重载中的赋值运算符()用于将一个对象的值赋给另一个对象C++=拷贝构造函数在创建新对象时,默认情况下会调用拷贝构造函数进行浅拷贝深拷贝在进行深拷贝时,需要手动分配新的内存空间并复制对象成员的值静态成员变量和静态成员函数静态成员变量静态成员函数属于类本身,而不是对象所有属于类本身,不需要创建对象就对象共享一个静态成员变量使可以调用静态成员函数只能访用类名访问静态成员变量问静态成员变量,不能访问非静态成员变量和函数使用场景静态成员变量和函数用于保存类级别的信息和操作,例如计数器或全局数据指针this指向自身使用范围
1.
2.12指针是一个隐藏的指针在类的成员函数内部,this this,它指向当前对象本身指针可用于访问当前对象的成员变量和成员函数隐式传递特殊情况
3.
4.34当调用成员函数时,指在静态成员函数中,指this this针被隐式地传递给该函数针不可用,因为静态成员函数不属于任何对象继承继承是面向对象编程中最重要的概念之一它允许创建新的类(称为派生类或子类)继承现有类(称为基类或父类)的属性和方法继承支持代码重用,减少重复代码并提高代码可维护性它使代码更具层次结构,易于理解和管理继承的基本形式单一继承多重继承一个子类仅继承自一个父类子类可以一个子类可以继承自多个父类子类可访问父类的公共成员和受保护成员以访问所有父类的公共成员和受保护成员继承的访问控制公有继承私有继承派生类可以访问基类中所有公有派生类不能直接访问基类中的成成员员,但可以通过基类的公有成员函数来访问保护继承派生类只能访问基类中的保护成员,但不能访问私有成员多继承多个父类多重特性
1.
2.12子类可以从多个父类继承成员子类可以同时获得多个父类的属性和方法菱形继承虚继承
3.
4.34当多个父类继承自同一个祖先虚继承用于解决菱形继承问题时,会导致菱形继承问题,确保只有一个祖先类实例虚函数和虚函数表虚函数表存储指向虚函数的指针,每个类都包含一个虚函数表多态通过虚函数实现,运行时绑定函数调用动态绑定根据对象类型选择合适的虚函数执行纯虚函数和抽象类抽象类纯虚函数应用场景抽象类不能被实例化,只作为基类其目纯虚函数没有函数体,由子类实现具体逻例如,定义一个形状类,包含一个抽象函的是为子类提供公共接口,子类必须实现辑它们在抽象类中定义,用来强制子类数计算面积不同子类(如圆形、三角形这些接口提供具体的实现)可以实现自己的面积计算方法多态基于类型的多态性基于继承的多态性
1.
2.12在运行时根据对象的实际类型通过虚函数,父类指针可以指执行不同的操作,例如函数重向子类对象,实现运行时动态载绑定多态的好处
3.3提高代码的可扩展性、可维护性和可读性和dynamic_cast static_cast类型转换dynamic_cast和是中的类用于运行时类型转换,它检查dynamic_cast static_cast C++dynamic_cast型转换运算符,用于将一种数据类型转换为另目标类型是否与源类型兼容,如果兼容则进行一种数据类型转换,否则返回nullptr多态static_cast用于编译时类型转换,它不进行通常用于多态场景,它可以根static_cast dynamic_cast运行时检查,如果类型转换不合法,则可能会据实际类型进行动态转换,而static_cast只导致程序崩溃能进行静态类型转换友元函数和友元类友元函数友元类优点缺点友元函数可以访问类的私有和友元类可以访问另一个类的所提高代码可读性破坏封装性••保护成员有成员,包括私有和保护成员简化代码编写代码维护困难••友元函数声明在类的内部,使用关键字友元类声明在类的内部,使用friend关键字friend内联函数提高效率代码简洁适用场景内联函数直接将函数体代码插入到调内联函数的代码直接嵌入调用处,使适合于小型、频繁调用的函数,例如用处,避免了函数调用的开销,提高代码更简洁易懂,便于理解和维护简单的计算函数、访问成员变量的函程序执行效率数等操作符重载概念语法示例操作符重载允许您为现有操作符赋予新使用关键字`operator`后跟要重载的操以下示例重载了加号运算符以执行两个的含义作符来定义重载运算符复数的加法例如,您可以重载加号运算符+以执行重载运算符必须至少有一个参数,并且class Complex{字符串的串联返回值类型必须是有效的类型public:Complex operator+constComplex otherconst{return Complexreal+other.real,imag+other.imag;}//...};类型转换运算符重载自定义类型转换显式类型转换语法允许重载类型转换运算符,将自定义使用关键字可以避免意外的类型使用关键字后跟目标类型,例C++explicit operator类型转换为其他类型转换如operator int嵌套类定义一个类可以在另一个类中定义,称为嵌套类访问控制嵌套类默认具有私有访问权限,外部无法直接访问封装嵌套类可以增强类的封装性,保护数据和方法匿名对象创建方式作用域使用场景匿名对象不使用任何标识符,直接在需匿名对象仅在声明它的表达式范围内有适用于临时使用,无需多次访问的对象要的地方创建效在表达式中直接使用对象创建后立即被销毁例如,调用函数时的参数或返回值拷贝对象的深拷贝和浅拷贝浅拷贝深拷贝12仅复制对象成员变量的值,两复制对象成员变量的值,并分个对象共享内存地址当一个配新的内存空间两个对象拥对象更改其成员变量的值时,有各自的成员变量副本,彼此另一个对象的值也会发生变化独立区别3浅拷贝效率高,但会导致两个对象共享资源,容易出现数据不一致问题深拷贝效率低,但确保每个对象拥有独立的资源,避免数据冲突异常处理处理错误try-catch-throw异常处理机制可以防止程序因错try块用于包含可能抛出异常的误而崩溃,提高程序的健壮性代码,catch块用于捕获异常,关键字用于抛出异常throw异常类型自定义异常C++提供了多种内置异常类型,程序员可以自定义异常类,以便例如std::exception、更好地处理特定类型的错误等std::runtime_errorRTTI运行时类型识别类型信息查询允许程序在运行时识别对提供了一种机制来获取对RTTI RTTI象的类型,这对动态绑定和多态象的类型信息,例如类名和继承性至关重要关系动态类型识别在运行时确定对象实际类型的能力,使程序能够根据类型进行不同的操作智能指针智能指针可有效解决内存泄漏问题,并释放开它提供了一种安全且方便的方式来管理资源,发者手动管理内存的负担例如文件、数据库连接和网络连接当智能指针超出作用域时,它会自动释放所指智能指针能保证在异常情况下也能正确释放资向的资源,避免资源泄漏源,提高代码的健壮性总结与展望本课程涵盖了类与对象的基本概念,从类的定义、成员变量和成员函数,C++到继承、多态和操作符重载等高级主题深入理解这些概念将为构建复杂而强大的应用程序打下坚实基础学习C++是一个持续的过程,鼓励您不断探索和实践,精进您的编程技能C++。
个人认证
优秀文档
获得点赞 0