4.2 父类之类智能指针转换 C++中是允许裸指针,因此裸指针之间转换方法同C语言指针强转,智能指针转换不能通过上述方法进行强转,必须通过库提供转换函数进行转换。 C++11的方法是:std::dynamic_pointer_cast;boost中的方法是:boost::dynamic_pointer_cast #include #include #include #include class Base { public :...
01_C语言提高_day02_14_指针做参数输入输出特性_rec是传智黑马C/C++第13期教程的第382集视频,该合集共计736集,视频收藏或关注UP主,及时了解更多相关视频内容。
野指针是指指向的位置是不可知的指针。 产生原因:指针指向的对象释放后,并未将指针置空; 避免措施:1)初始化置空;2)申请内存后判空;3)指针释放后置空;4)使用智能指针 智能指针(auto_ptr、share_ptr) 1)智能指针概念:智能指针是封装了指针、及构造函数、析构函数的类。 2)使用智能指针原因:管理指针,防止内存...
this 指针被隐含地声明为: ClassName *const this,这意味着不能给 this 指针赋值;在 ClassName 类的const 成员函数中,this 指针的类型为:const ClassName* const,这说明不能对 this 指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作); this 并不是一个常规变量,而是个右值,所以不能取...
可以在整个类层次结构中移动指针,子类转化为父类安全(向上转换),父类转化为子类不安全(因为子类可能有不在父类的字段或方法) 向上转换是一种隐式转换。 dynamic_cast 用于多态类型的转换 执行行运行时类型检查 只适用于指针或引用 对不明确的指针的转换将失败(返回 nullptr),但不引发异常 ...
首先析构函数可以为虚函数,当析构一个指向子类的父类指针时,编译器可以根据虚函数表寻找到子类的析构函数进行调用,从而正确释放子类对象的资源。 如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向子类的父类指针时,只会调用父类的析构函数而不调用子类析构函数,这样就会造成子类对象析构不完全造成内...
基类(父类)——> 派生类(子类) 多态多态,即多种状态,在面向对象语言中,接口的多种不同的实现方式即为多态。 C++ 多态有两种:静态多态(早绑定)、动态多态(晚绑定)。静态多态是通过函数重载实现的;动态多态是通过虚函数实现的。 多态是以封装和继承为基础的。
摘要:关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。 多态 函数重载(overload) 相同的作用域(在同一个类中); 函数名字相同、参数(类型或个数)不同; virtual关键字可有可无; 隐阅读全文 ...
内联是在编译器建议编译器内联,而虚函数的多态性在运行期,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态性时(运行期)不可以内联。 inline virtual 唯一可以内联的时候是:编译器知道所调用的对象是哪个类(如 Base::who()),这只有在编译器具有实际对象而不是对象的指针或引用时才会发生。虚...
子类转换为父类:向上转型,使用dynamic_cast(expression),这种转换相对来说比较安全不会有数据的丢失; 父类转换为子类:向下转型,可以使用强制转换,这种转换时不安全的,会导致数据的丢失,原因是父类的指针或者引用的内存中可能不包含子类的成员的内存。 ★模板的实例化和具体化 // #1 模板定义 template<class T> st...