Shelby-Lee
这个作者很懒,什么都没留下…
展开
-
C++指针与引用:差异、应用及最佳实践
指针,在 C++ 的世界里,是一种特殊的变量,它的使命是存储其他变量在内存中的地址,而非变量的值本身。这就好比一个房间号,它并不代表房间里的物品,却能引领我们找到对应的房间。在 32 位系统中,指针占用 4 个字节(32 位 = 4 字节),而在 64 位系统中,指针占用 8 个字节。在 C++ 中,定义指针的语法简洁明了:数据类型 * 指针变量名。例如,int num = 10;原创 2025-04-03 14:51:40 · 10 阅读 · 0 评论 -
C++编程:虚函数和虚函数列表
虚函数是 C++ 中实现多态性的关键,它允许在派生类中重新定义与基类同名的函数,从而实现不同的行为。在基类中,使用virtual关键字来声明虚函数。public:// 声明虚函数draw在上述代码中,draw函数被声明为虚函数。需要注意的是,虚函数必须是类的成员函数,不能是全局函数或静态成员函数。而且,虚函数的声明只能出现在类的定义中,不能在类外的函数定义中添加virtual关键字。虚函数和虚函数列表是 C++ 多态性的核心机制,它们在 C++ 编程中扮演着至关重要的角色。原创 2025-04-03 10:11:07 · 10 阅读 · 0 评论 -
C++ STL:六大组件全解析
STL 标准库中也提供了一些常用的仿函数 ,例如算术仿函数(如std::plus、std::minus、std::multiplies等)、关系仿函数(如std::equal_to、std::not_equal_to、std::greater等)和逻辑仿函数(如std::logical_and、std::logical_or、std::logical_not等)。迭代器的行为类似于指针,它可以指向容器中的某个元素,通过迭代器,我们可以遍历容器中的元素,读取和修改元素的值。原创 2025-04-03 09:26:21 · 292 阅读 · 0 评论 -
C++编程:指针
指针定义的语法为:数据类型 *指针变量名。例如,int *p;这条语句定义了一个名为 p 的指针变量,它指向的是 int 类型的数据。这里的 * 是指针声明符,表明 p 是一个指针。需要注意的是,指针变量本身也占据一定的内存空间,其大小与操作系统相关,在 32 位系统下通常为 4 个字节,64 位系统下则为 8 个字节,且这一大小与它所指向的数据类型无关。函数指针是指向函数的指针变量,它存储的是函数的入口地址。函数指针的声明需要明确函数的返回类型和参数列表。原创 2025-04-02 11:20:26 · 600 阅读 · 0 评论 -
C++强制类型转换:从入门到精通
为了更清晰地展示 C++ 中四种强制类型转换运算符(static_cast、const_cast、reinterpret_cast和dynamic_cast)的区别,下面通过表格形式对它们的功能、用法、适用场景和注意事项进行详细对比:转换运算符功能用法适用场景注意事项用于具有明确定义的类型之间的转换,包括基本数据类型转换以及类层次结构中相关类型的转换基本数据类型间转换,如int转float;类层次结构中的上行和下行转换(下行转换需谨慎)下行转换时没有运行时类型检查,可能导致未定义行为;原创 2025-04-02 11:01:35 · 392 阅读 · 0 评论 -
C++泛型编程:开启代码复用
泛型编程,简单来说,是一种编程范式,它允许我们编写与数据类型无关的代码。在泛型编程中,类型被参数化,使得同一套代码可以适用于多种不同的数据类型。这种编程方式打破了传统编程中对特定数据类型的依赖,极大地提高了代码的通用性和可复用性。这里的typename T声明了一个类型参数T,它可以代表任何数据类型,如int、double、float等。当我们调用这个函数时,编译器会根据传入的实际参数类型,自动生成相应的函数实例。// 编译器自动生成add<int>函数实例。原创 2025-04-02 10:41:53 · 526 阅读 · 0 评论 -
C++ 编程:左值引用与右值引用
在 C++ 的编程世界里,左值引用和右值引用就像是两把神奇的钥匙,各自开启了不同的大门,为我们带来了高效、灵活的编程体验。左值引用作为传统 C++ 就存在的特性,它就像是一位忠诚的伙伴,紧紧跟随有固定内存地址的左值对象,在函数参数传递和返回值场景中,通过避免对象的拷贝,为程序的高效运行立下了汗马功劳。而右值引用则是 C++11 引入的新成员,它像是一位充满活力的探险家,专门与那些短暂存在的右值对象打交道,为 C++ 带来了移动语义和完美转发这两大强大的特性。原创 2025-04-02 10:15:43 · 578 阅读 · 0 评论 -
C++11:开启现代C++编程新时代
假设我们正在开发一个网络服务器,该服务器需要处理大量的并发请求,实现用户的登录、注册、数据查询等功能。在项目开发初期,使用的是 C++98/03 标准,随着业务的不断发展和用户量的增加,服务器面临着诸多挑战。在内存管理方面,由于手动管理内存,频繁地使用new和delete操作符,导致代码中出现了一些内存泄漏的问题。例如,在处理用户请求时,为了存储用户的临时数据,分配了一块内存,但在请求处理完成后,由于代码逻辑的复杂性,部分内存没有被正确释放,随着时间的推移,服务器的内存占用不断增加,性能逐渐下降。原创 2025-04-02 09:50:31 · 310 阅读 · 0 评论 -
C++ 看面向过程与面向对象编程
在编程的广袤天地中,编程范式如同璀璨繁星,照亮着开发者前行的道路。而在 C++ 这门强大的编程语言中,面向过程编程与面向对象编程无疑是最为耀眼的两颗明星,它们各自散发着独特的光芒,为开发者解决问题提供了截然不同却又同样强大的思路。面向过程编程,以其简洁直接、注重步骤流程的特点,在软件开发的早期阶段大放异彩,成为众多简单任务的首选编程方式。而随着软件系统的日益复杂,面向对象编程应运而生,它以模拟现实世界中的对象及其交互为核心思想,赋予了程序更高的灵活性、可维护性和扩展性。原创 2025-04-02 09:17:00 · 425 阅读 · 0 评论 -
C++重载:让代码“一专多能”
函数重载,简单来说,就是在同一个作用域内,可以定义多个名字相同但参数列表不同的函数。这里的参数列表不同,具体体现在参数的类型、个数或顺序上。这三个函数都名为add,但第一个函数接受两个int类型的参数,第二个函数接受两个double类型的参数,第三个函数则接受三个int类型的参数,它们构成了函数重载。需要特别注意的是,函数重载与返回值类型无关,仅仅返回值不同的同名函数不能构成重载。// 编译错误,仅返回值不同,不能构成函数重载运算符重载,是 C++ 赋予我们的又一项强大能力,它。原创 2025-04-02 08:55:44 · 231 阅读 · 0 评论 -
C++ 深拷贝与浅拷贝:内存世界的“双胞胎”谜题
浅拷贝,简单来说,就是按位拷贝对象。当进行浅拷贝时,它仅仅复制对象的属性值 ,而不会复制属性所指向的内存空间。假如一个对象里包含指针类型的属性,浅拷贝只会复制这个指针的地址,而非指针所指向的实际数据。这就好比有两份地图,浅拷贝只是复制了地图的纸张,而地图上标记的宝藏地点(实际数据)并没有被真正复制,两份地图指向的是同一个宝藏地点。在 C++ 中,编译器默认生成的拷贝构造函数就是浅拷贝构造函数,它会逐位复制对象的成员变量。深拷贝是一种更为全面的对象复制方式。原创 2025-04-01 21:59:35 · 417 阅读 · 0 评论 -
C++面试八股文
和静态多态(又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数),其中动态多态是通过虚函数实现的,虚函数是类的成员函数,存在存储虚函数指针的表叫做虚函数表,虚函数表是一个存储类成员虚函数的指针,每个指针都指向调用它的地方,当子类调用虚函数时,就会去虚表里面找自己对应的函数指针,从而实现“谁调用、实现谁”从而实现多态。而C++符号表中的符号不是以函数名命名的,称为函数名修饰规则,虽然函数名相同,但是函数参数等其他属性不同,取的符号也不同,所以不会产生查询歧义的问题,使得函数可以重载。原创 2025-02-14 09:49:00 · 657 阅读 · 0 评论 -
C++智能指针:内存管理的新姿势
智能指针作为 C++ 内存管理的得力助手,凭借其基于 RAII 机制和引用计数等技术,为我们带来了前所未有的便利和安全性。std::unique_ptr的独占式管理,确保了资源的唯一性和高效性,让我们无需担心资源被意外共享而引发的问题;std::shared_ptr的共享式设计,巧妙地解决了资源在多个模块间共享时的生命周期管理难题,通过引用计数机制,精准地控制着资源的释放时机;原创 2025-04-01 20:30:56 · 652 阅读 · 0 评论 -
C++ STL容器:高效编程的秘密武器
STL 容器是 C++ 编程中极为强大和实用的工具,它为我们提供了丰富的数据结构和高效的操作方法。通过深入了解序列式容器、关联式容器和容器适配器的特点与使用场景,我们能够根据具体的需求选择最合适的容器,从而编写出更高效、更易维护的代码。在实际编程中,不断练习和使用 STL 容器,积累经验,将有助于你更好地掌握它们的特性和使用技巧。同时,多阅读优秀的 C++ 代码,学习他人在容器选择和使用方面的经验,也能进一步提升你的编程能力。原创 2025-04-01 20:57:53 · 636 阅读 · 0 评论