2024.9.26C++作业

  1. 什么是虚函数,什么是纯虚函数?

1.虚函数在基类中声明,使用virtual关键字修饰成员函数,并且允许在派生类中重写。

2.在运行时,允许基类指针或者引用调用这个函数时,根据实际对象类型调用派生类,实现动态绑定,实现多态性。

3.纯虚函数是没有在基类中实现的函数,只声明,不实现,无法直接实例化,必须在派生类中提供具体的实现。

4.编译器维持一张表支持虚函数,记录每个对象所对应的虚函数实现,在运行时提供函数调用。

  1. 基类为什么需要虚析构函数?

在多态过程中,如果基类指针要删除一个派生类对象,如果没有定义虚析构函数,那么只会调用基类的析构函数,派生类的虚构函数不会被调用,可能造成内存泄漏,

  1. 如何初始化 const 和 static 数据成员?

1.const成员必须通过构造函数的初始化列表进行初始化,不能在构造函数内赋值。

2.static成员变量属于一个类,而不是某个对象,因此必须在类外进行初始化。

  1. 引用和指针的区别

1.引用使用&,指针使用*

2.指针储存的是对象地址,访问时通过解引用访问实际值,引用是对象别名,在编译时替换成对象本身。

3.引用必须在声明时进行初始化,而指针可以在声明后稍后赋值。

4.引用不可以被重新赋值,指针可以指向不同的对象。

5.指针可以指向nullptr为空,引用必须使用指向合法对象。

6.指针占用内存,引用不占用。

7.指针可以有多级指针,引用只有一级。

8.引用多用于参数传递减少拷贝开销,指针用于动态内存管理和可能为nullptr的对象。

  1. new 和 malloc 的区别

1.malloc是c标准库函数,用于分配指定字节空间,返回void*指针指向该空间。new是c++y运算符,直接返回所需类型指针,避免了强制转换。

2.new在调用时会调用构造函数初始化对象,而malloc不会。

3.new分配失败抛出异常,malloc返回值为NULL

4.new分配的内存需要使用delete释放,调用析构函数。malloc使用free释放。

6.new适用于c++对象创建,而malloc适用于手动管理对象数据。

  1. 内存泄漏是怎么产生的,如何避免

内存泄漏是程序动态分配的内存未即使释放,导致内存无法再次使用和时候导致的。

避免方法:使用析构函数进行释放。手动追踪内存的分配和释放。

  1. C++ 的内存分区

1.栈区:储存局部变量和函数调用相关栈帧。

2.堆区:用于动态内存分配,需要手动释放。

3.全局/静态区:储存全局变量和静态变量,程序启动时分配,结束时释放。

4.常量区:如字符串常量。

5.代码区:存放可执行代码。

  1. 设计模式及应用场景

1.单例模式:确保一个类只有一个实例,提供全局访问,比如数据库的连接池管理。

2.工厂模式:用于创建对象的封装,适用于对象创建逻辑复杂且需要根据输入类型创建不同对象的场景。

  1. 常用的数据结构及时间、空间复杂度

1.数组,访问(O1),插入删除(On)

2.链表,访问(On),插入删除(O1)

3.栈,基于数组或者链表实现,出入栈时间复杂度为(O1)

4.队列,基于数组或者链表实现,出入队列的时间复杂度为(O1)

5.哈希表:查找,插入,删除的时间复杂度为(O1)

相关推荐
爱编程的化学家1 小时前
代码随想录算法训练营第十一天--二叉树2 || 226.翻转二叉树 / 101.对称二叉树 / 104.二叉树的最大深度 / 111.二叉树的最小深度
数据结构·c++·算法·leetcode·二叉树·代码随想录
眠りたいです2 小时前
基于脚手架微服务的视频点播系统-数据管理与网络通信部分的预备工作
c++·qt·ui·微服务·云原生·架构·媒体
烦躁的大鼻嘎2 小时前
【Linux】深入Linux多线程架构与高性能编程
linux·运维·服务器·开发语言·c++·ubuntu
野生的编程萌新2 小时前
【C++深学日志】C++编程利器:缺省参数、函数重载、引用详解
c语言·开发语言·c++
愚润求学2 小时前
【贪心算法】day10
c++·算法·leetcode·贪心算法
智者知已应修善业2 小时前
【矩阵找最大小所在位置】2022-11-13
c语言·c++·经验分享·笔记·算法·矩阵
小柯J桑_2 小时前
C++之特殊类设计
java·开发语言·c++
bikong73 小时前
Qt/C++,windows多进程demo
c++·windows·qt
努力学习的小廉3 小时前
我爱学算法之—— 位运算(上)
c++·算法
青草地溪水旁3 小时前
设计模式(C++)详解—原型模式(1)
c++·设计模式·原型模式