为了更好的理解继承和多态,做一个文本查询的小例子。 接口类:Query有2个方法。 eval:查询,返回查询结果类QueryResult rep:得到要查询的文本 客户端程序的使用方法: 接口类:Query,有一个私有的父类Query_base的智能指针。 父类Query_base有子类WordQu
多态成立的三个条件(有继承、有虚函数重写、父类指针/引用指向子类对象),多态理论基础(静态联编和动...
27、四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr 28、shared_ptr中的循环引用...
}voidtest(){//测试C++的继承和多态A a;//定义一个父类对象 aB b;//定义一个子类对象 bA* p1 = &a;//定义一个父类指针指向父类的对象p1->func();//调用父类的同名函数p1= &b;//让父类指针指向子类的对象p1->func();//调用子类的同名函数//C 语言模拟继承和多态的测试_A _a;//定义一个父...
智能指针实现原理 智能指针,里面的计数器何时会改变 智能指针和管理的对象分别在哪个区(智能指针本身在栈区,托管的资源在堆区,利用了栈对象超出生命周期后自动析构的特征,所以无需手动delete释放资源。 面向对象的特性:多态原理 介绍一下虚函数,虚函数怎么实现的 多态和继承在什么情况下使用 除了多态和继承还有什么面...
dynamic_cast:动态转换,同于多态之间的类型转换 reinterpret_cast:用于不同类型的指针类型的转换。类的static成员的特点 static成员只有一份拷贝,被该类的所有对象所共享; static成员只能在类外初始化,并存放在全局(静态)存储区,不计入类的大小中; static可以通过类名直接访问,也可以通过对象访问; static成员函数只能...
this 指针是一个隐含于每一个成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。 当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用 this 指针。 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个...
在C语言中,内存管理相对较为直接和底层。程序员需要手动分配(如使用malloc)和释放(如使用free)内存,这要求程序员对内存管理有深入的理解,否则可能导致内存泄漏或野指针等问题。C++虽然也支持手动内存管理,但更推荐使用智能指针(如std::unique_ptr、std::shared_ptr)和容器类(如std::vector、std::list)等...
2、编译和链接过程 在C++中,由于它包含了大量面向对象编程特性,编译器在编译时会检查类的继承和多态等概念,这个过程可能比C语言的编译过程要复杂。另外,C++还支持运行时的类型信息(RTTI),这在C语言中并不存在。3、内存管理 C++引入了智能指针和RAII(Resource Acquisition Is Initialization)概念,这使得内存...
如果函数退出,那么和作为栈上局部变量,智能指针本身调用自己的析构函数,给引用的对象引用计数减去1(本质采用引用计数,当引用计数为0的时候,才会删除对象)。此时如下图所示,可以看到智能指针的引用计数仍然为1, 这也就导致了这两个节点的实际内存,并没有被释放掉, 从而导致内存泄露。