《C++面向对象进阶》课件.ppt
************************静态成员变量和函数静态成员变量是指属于类的所有对象的共享变量。静态成员变量在内存中只有一份拷贝,所有对象都可以访问和修改它。静态成员函数是指属于类的函数,它可以访问类的静态成员变量,但不能访问类的非静态成员变量。静态成员函数可以通过类名或对象来调用。1共享变量属于类的所有对象的共享变量。2一份拷贝在内存中只有一份拷贝。3类名或对象调用静态成员函数可以通过类名或对象来调用。this指针this指针是指向当前对象的指针。this指针是类成员函数的一个隐含参数,它指向调用该函数的对象。通过this指针,可以访问对象的成员变量和成员函数。this指针主要用于以下情况:区分成员变量和局部变量、在成员函数中返回对象本身。区分变量区分成员变量和局部变量返回对象在成员函数中返回对象本身对象的内存模型对象的内存模型是指对象在内存中的存储方式。对象的内存模型包括对象的成员变量和虚函数指针。对象的成员变量按照声明的顺序存储在内存中,虚函数指针指向该类的虚函数表。理解对象的内存模型对于理解C++的面向对象特性至关重要。通过对象的内存模型,可以了解对象的成员变量是如何存储的,虚函数是如何实现的,以及多态是如何工作的。成员变量按照声明的顺序存储在内存中。虚函数指针指向该类的虚函数表。保护和保护继承保护成员是指只能被类的内部和派生类访问的成员。保护继承是指派生类以protected的方式继承基类。在保护继承中,基类的公有成员在派生类中变为保护成员,基类的保护成员在派生类中仍然是保护成员,基类的私有成员不能被派生类访问。保护继承可以控制派生类对基类成员的访问权限,提高代码的安全性和可维护性。1保护成员只能被类的内部和派生类访问的成员。2保护继承派生类以protected的方式继承基类。3控制访问权限可以控制派生类对基类成员的访问权限。类的静态类型和动态类型类的静态类型是指在编译时确定的类型,类的动态类型是指在运行时确定的类型。对象的静态类型是声明该对象的类型,对象的动态类型是该对象实际指向的类型。静态类型和动态类型在多态中起着重要的作用。在调用虚函数时,会根据对象的动态类型来决定调用哪个函数,这称为动态绑定。静态类型在编译时确定的类型。动态类型在运行时确定的类型。多态在调用虚函数时,会根据对象的动态类型来决定调用哪个函数。动态类型转换动态类型转换是指在运行时将一个对象的类型转换为另一个类型。在C++中,可以使用dynamic_cast运算符来进行动态类型转换。dynamic_cast运算符只能用于具有虚函数的类类型,它可以将一个基类指针或引用转换为派生类指针或引用。如果dynamic_cast转换失败,对于指针类型会返回nullptr,对于引用类型会抛出std::bad_cast异常。1运行时转换在运行时将一个对象的类型转换为另一个类型。2dynamic_cast使用dynamic_cast运算符来进行动态类型转换。3转换失败对于指针类型会返回nullptr,对于引用类型会抛出std::bad_cast异常。dynamic_cast和typeiddynamic_cast运算符用于进行动态类型转换,它只能用于具有虚函数的类类型。typeid运算符用于获取对象的类型信息,它可以用于任何类型。dynamic_cast运算符可以在运行时检查类型转换是否安全,如果转换不安全会返回nullptr或抛出异常。typeid运算符只能获取对象的静态类型,不能获取对象的动态类型。dynamic_cast用于动态类型转换,只能用于具有虚函数的类类型。typeid用于获取对象的类型信息,可以用于任何类型。类型安全dynamic_cast可以在运行时检查类型转换是否安全。智能指针智能指针是一种特殊的指针,它可以自动管理所指向的对象的生命周期,从而避免内存泄漏问题。C++中常用的智能指针包括auto_ptr、unique_ptr、shared_ptr和weak_ptr。auto_ptr已经被C++11标准废弃,建议使用unique_ptr、shared_ptr和weak_ptr来代替auto_ptr。unique_ptr拥有对对象的独占所有权,shared_ptr允许多个指针共享对对象的所有权,weak_ptr是指向shared_ptr所管理对象的弱引用,它不会增加对象的引用计数。自动管理1避免泄漏2常用类型3异常处理异常处理是一种处理程序运行时错误的机制。在C++中,可以使用try-catch块来捕获和处理异常。try块包含可能抛出异常