站长工具麻豆,网速在线测速,单招网站开发,如何寻找做企业网站的多态#xff1a;在C中#xff0c;如果类B继承自A#xff0c;并且定义了虚函数f(), 类C又继承自B但没有重写f()#xff0c;那么当你执行如下代码#xff1a;
Cpp
C *c new C();
c-f();调用的将是B类中实现的f()方法#xff0c;因为C没有提供自己的覆盖版本。若要调用…多态在C中如果类B继承自A并且定义了虚函数f(), 类C又继承自B但没有重写f()那么当你执行如下代码
Cpp
C *c new C();
c-f();调用的将是B类中实现的f()方法因为C没有提供自己的覆盖版本。若要调用A类基类的方法可以使用显式调用父类的成员函数语法例如在C类中
Cpp
class C : public B {
public:void f() override {B::f(); // 显式调用B类中的f()方法// 或者执行C类自己的逻辑}
};二叉树、平衡二叉树如AVL树或红黑树、B树和红黑树访问一个元素的时间复杂度分析 ● 二叉树最坏情况下即树退化为链表时时间复杂度为O(n)。 ● 平衡二叉树如AVL树或红黑树其高度保持在logN级别所以访问一个元素的时间复杂度为O(logN)。 ● B树在数据库索引等场景常见通常用于磁盘存储内部节点不存储数据所有叶子节点在同一层因此查找任意键值的时间复杂度也是O(logN)。 ● 红黑树一种自平衡二叉查找树同样保证了查找、插入、删除操作的时间复杂度为O(logN)。堆和栈的区别 ○ 栈Stack由编译器自动分配和释放空间较小但快速常用于存储局部变量、函数参数和返回地址等。栈内存分配是连续的、后进先出LIFO原则。 ○ 堆Heap由程序员手动申请和释放通过new和delete关键字空间较大但分配和回收相对慢用于动态创建对象和数组等大小可变。注意在C中new关键字是在堆上实例化对象的而不是栈上。栈上的对象通常是直接声明和初始化的生命周期与所在作用域相关联。四次挥手这是TCP连接断开的过程包括FIN结束、ACK确认、FINACK、ACK四个阶段确保双方都已知晓连接关闭并释放资源。半连接通常指的是TCP的“半开连接”即三次握手过程中服务器收到SYN报文并发送了SYNACK回应但客户端没有回复ACK此时服务器端会维持一个半连接状态。TCP与UDP区别 ○ TCP提供面向连接、可靠传输的服务有流量控制、拥塞控制和错误校验机制无消息长度限制但存在一定的延迟和额外开销。 ○ UDP则是无连接的不保证消息的顺序和可靠性但是传输效率高适用于实时应用如音视频流传输。UDP的数据包有一个最大长度限制由MTU最大传输单元决定通常在IP层会有大约65535字节的限制但实际上由于头部开销有效负载会更小。进程和线程的区别 ○ 进程是操作系统资源分配的基本单位每个进程拥有独立的内存空间、文件描述符集和其他系统资源互不影响 ○ 线程是CPU调度和执行的基本单位同一进程内的多个线程共享进程的内存空间和全局变量切换代价小通信便捷。程序从硬盘到CPU执行过程 ○ 首先操作系统加载器将硬盘上的可执行文件读入内存这个过程包括读取程序的代码段、数据段以及必要的资源 ○ 操作系统为该程序创建一个新的进程并为其分配相应的内存空间 ○ 控制权转移到新进程CPU开始执行程序的第一条指令 ○ 程序运行过程中根据需要创建线程线程在进程中并发执行共享进程资源 ○ CPU通过分时复用的方式在不同线程间切换使得多任务能够同时进行。