C++的那些事儿
文章平均质量分 77
给小白的C++学习指南,从C++入门到精通
Littlewith
愿我所写的每一行代码都如同王维的诗一般优雅!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++课设实践项目:C++构建的学籍管理系统
这篇150字的摘要概括了学生信息管理系统课设的核心内容: 本文介绍了一个基于C++开发的学生信息管理系统课程设计项目。系统采用模块化架构,实现了账户登录(MD5加密)、学生信息增删改查、成绩统计分析和柱状图展示等功能。项目包含控制器、界面、文件读写、数据模型和加密等核心模块,支持管理员和学生两种权限角色,数据以文本文件持久化存储。系统通过控制台界面运行,展示了成绩管理、合格率统计等教学管理功能,适合作为C++面向对象编程的学习案例。文章提供了项目亮点、技术环境、功能截图和源码获取方式,可作为类似课程设计的参原创 2025-07-24 16:21:51 · 736 阅读 · 0 评论 -
C++必看:关于多态下基类函数参数的调用问题
C++虚函数实现运行时多态的关键在于通过基类指针或引用调用时,实际执行的函数版本由对象动态类型决定。虚函数的多态性与函数参数类型无关,参数是否为指针不影响多态决议过程。当参数本身是基类指针时,其多态行为与调用者的多态行为相互独立。虚函数机制依赖于编译器生成的虚函数表和虚指针,在运行时动态确定函数调用。原创 2025-07-18 10:05:42 · 351 阅读 · 0 评论 -
C++必看:关于引用的多重引用问题
四种C++声明分析: A(int a, &ra = a, &&ref = ra;)错误,右值引用&&ref不能直接绑定左值ra; B(int &refa[10];)错误,C++不支持引用数组; C(int a, &ra = a, &*refp = &ra;)错误,&*refp语法无效; D(int* pi, *&pref = pi;)正确,pref是对指针pi的合法引用。 总结:涉及引用和指针的声明需注意绑定规则和类型匹原创 2025-07-18 10:02:55 · 470 阅读 · 0 评论 -
C++必看:左值和右值问题
摘要: C++中的左值(lvalue)和右值(rvalue)是表达式分类的核心概念。左值具有持久身份,可被命名、取地址(如变量int x),常出现在赋值左侧;右值则是临时对象(如字面量42或表达式x+1),无持久地址,生命周期短暂。C++11引入右值引用(&&)后,右值细分为纯右值(临时值)和将亡值(可移动对象,如std::move(x))。关键区别在于左值可修改且持久,右值临时且不可直接修改。这一分类对赋值、引用绑定及移动语义(避免拷贝)至关重要。原创 2025-07-17 09:09:24 · 768 阅读 · 0 评论 -
C++必看:子类引用绑定到父类问题
C++允许子类对象赋值给父类引用,这是面向对象多态性的核心特性。子类必须直接或间接继承父类,且父类方法需声明为虚函数才能实现动态绑定。关键注意事项包括:避免对象切片(应使用引用或指针而非直接赋值)、虚函数的使用(确保正确多态行为)以及访问权限限制(父类引用无法直接访问子类特有成员)。典型应用场景如工厂模式,通过基类引用操作不同派生类对象。正确使用该特性需遵循继承关系、虚函数机制,并警惕对象切片问题。原创 2025-07-16 09:33:52 · 465 阅读 · 0 评论 -
C++必看:[malloc、new、free和delete的比较]、[#define和const的比较]、[*p++、*(p++)、(*p)++、*++p、++*p的比较]、[inline和宏的比较]
C++内存管理与运算符解析 内存分配方面,new/delete与malloc/free的主要区别在于构造函数/析构函数的调用。new会调用构造函数并分配内存,delete先调用析构函数再回收空间,而malloc/free仅处理内存不调用构造/析构函数。 #define与const在预处理阶段、类型检查、内存分配和代码展开方式上存在显著差异。const具有类型安全性和内存分配优势,而#define是简单的文本替换。 指针运算符优先级方面,后置++优先级高于*,前置++与*同级。不同组合会产生不同的指针移动和值原创 2025-07-15 10:09:26 · 619 阅读 · 0 评论 -
C++必看:列表初始化、不能声明为虚函数的、const同名函数的调用优先级问题、指针和引用的区别
C++关键特性摘要:1)初始化列表必须用于const成员、引用成员、无默认构造函数的类成员及父类;2)构造函数、静态函数、全局/友元函数不能声明为虚函数,内联虚函数行为复杂;3)同名const函数调用优先级取决于调用对象const性,非const对象优先调用非const版本;4)指针与引用核心区别:引用必须初始化且不可更改,不能为空,而指针更灵活可修改和为空。虚函数调用时,const版本选择取决于调用上下文而非动态绑定。原创 2025-07-15 10:00:23 · 741 阅读 · 0 评论 -
C++必看:关于const关键字用法的总结
C++ const用法总结 const关键字在C++中用于限制变量修改,增强代码安全性和可读性。主要用法包括: 基础用法: 常量声明:const int x = 10; 指针常量:int* const ptr(指针不可变) 常量指针:const int* ptr(内容不可变) 函数参数: 值传递:void func(const int x)(限制内部修改) 引用传递:void func(const int& x)(避免拷贝且保护数据) 指针传递:void func(const int* x)(保护指原创 2025-07-14 13:57:34 · 1208 阅读 · 0 评论 -
C++必看:<<左移操作 和 >>右移操作的相关问题
C++中的位操作符<<和>>的补位规则不同。左移<<总是低位补0,但若修改有符号数的符号位会导致未定义行为。右移>>则分两种情况:无符号数高位补0(逻辑右移),有符号数高位补符号位(算术右移)。建议位运算优先使用无符号类型,避免未定义行为。对有符号数需要逻辑右移时,可先转为无符号类型再操作。原创 2025-07-14 13:53:21 · 645 阅读 · 0 评论 -
C++必看:C++的运算符重载
摘要: C++运算符重载的返回值选择取决于语义、性能和使用场景。**算术运算符(如+、-)通常返回新对象(如Complex),因其需生成独立结果;而赋值类运算符(如=、+=)和访问类运算符(如[])**返回引用(如Complex&),以支持链式操作和直接修改。返回对象确保安全性但可能拷贝,返回引用高效但需注意生命周期。特殊运算符(如后置++返回对象,前置++返回引用)需结合语义设计。成员函数重载适用于紧密关联对象的运算符(=、[]、->等),非成员函数(如友元)适用于对称操作(如a+b和b+a原创 2025-07-13 21:27:21 · 1156 阅读 · 0 评论 -
C++必看:关于static_cast和dynamic_cast问题
C++中static_cast和dynamic_cast是两种类型转换运算符: static_cast在编译时进行类型转换,适用于基本类型转换和类层次中的向上/向下转换,但不做运行时检查,存在安全隐患; dynamic_cast在运行时通过RTTI检查类型安全,仅适用于多态类(需虚函数),转换失败会返回nullptr或抛出异常,安全性高但性能较低。 static_cast类似C风格强制转换但更规范,适用于确定类型关系的场景;dynamic_cast适合需要运行时类型安全的复杂类层次转换。原创 2025-07-13 21:22:34 · 919 阅读 · 0 评论 -
C++必看:很重要的C++内存对齐模型
摘要:本文探讨了C++中空类和空结构体的内存模型问题,以及结构体内存对齐机制。空类/结构体的sizeof为1字节,添加普通成员函数不影响大小,但虚函数会引入虚表指针(4/8字节)。结构体对齐遵循系统资源分配规则,其大小为对齐要求的整数倍(最小8字节或最大成员大小)。嵌套结构体需特殊处理,对齐到所有成员的最大对齐数。代码示例展示了不同结构体布局对内存占用影响,并提及了修改对齐数的方法。原创 2025-07-13 09:12:26 · 378 阅读 · 0 评论 -
C++必看:运算符优先级问题
这篇文章总结了C++运算符的优先级规则,分为六个层级和特殊运算符。最高优先级是括号和成员访问,其次是单目运算、算术运算、位运算、比较和逻辑运算,最后是赋值和逗号运算。特殊运算符如三目运算符和移位运算符也有明确的优先级位置。文章通过简洁的口诀帮助记忆,如“括号优先,点箭头紧跟”和“乘除模,加减后”。这些规则对于编写正确且高效的C++代码至关重要。原创 2025-07-13 09:11:25 · 667 阅读 · 0 评论 -
C++必看:内存上的大小端问题
本文通过代码示例分析了x86架构的字节序特性。代码中定义了一个32位整数a=0xabcd1234,将其地址转换为char*后取第一个字节赋值给char变量b。由于x86采用小端序(低字节存储在低地址),变量a的起始地址存储的是最低字节0x34,因此b的值为0x34(十进制52)。通过printf验证了该结果,并指出在大端序架构下结果会不同(0xab)。结论强调在x86机器上,b的值确定为0x34(52)。原创 2025-07-03 09:08:44 · 363 阅读 · 0 评论 -
C++必看:构造函数修饰符
C++构造函数虽然没有传统修饰符,但有多种特殊特性影响其行为:explicit防止隐式转换;=default要求默认实现;=delete禁用构造;constexpr支持编译期构造。此外还有委托构造(减少代码重复)、初始化列表(高效初始化)、继承构造(复用基类构造器)等机制。这些特性赋予构造函数灵活性,但注意构造函数不能是虚函数或静态函数。这些"修饰"方式共同完善了C++对象构造的控制能力。原创 2025-07-02 09:34:41 · 601 阅读 · 0 评论 -
C++必看:符号与溢出问题
摘要:C++中整数分为有符号(signed)和无符号(unsigned)类型,主要区别在于能否表示负数。有符号整数采用二进制补码存储,溢出时是未定义行为;无符号整数直接二进制存储,溢出时遵循模运算规则。类型大小和范围因平台而异,如int通常为4字节(-2^31到2^31-1)。混合运算可能引发意外类型提升,建议使用<limits>检查边界。关键区别在于:有符号可表负数但溢出危险,无符号范围更大且溢出可预测。原创 2025-07-01 15:46:42 · 1324 阅读 · 0 评论 -
C++必看:C++构造函数的初始化顺序
本文总结了C++继承体系中构造函数和虚函数的调用规则:1)构造函数调用顺序为:虚基类→非虚基类(按声明顺序)→成员对象(按声明顺序)→派生类自身;2)构造函数中的虚函数调用静态绑定到当前类;3)拷贝构造函数在对象初始化而非赋值时调用;4)子类虚函数声明不影响父类静态绑定,仅对后续继承有效,多态性需从基类开始启用。文中通过代码示例演示了这些规则的具体表现,包括虚函数表切换时机和虚函数绑定机制。原创 2025-07-01 15:21:53 · 2870 阅读 · 0 评论 -
C++必看:C++深拷贝和浅拷贝
摘要: 浅拷贝仅复制对象表层值(含指针地址),可能导致内存共享;深拷贝则完全复制对象及其动态内存,创建独立副本。典型场景中,涉及指针成员、容器存储指针或类赋值操作时需深拷贝,可通过自定义拷贝构造函数实现;而纯值类型、智能指针或临时对象通常无需深拷贝。智能指针(如std::shared_ptr)已自动处理资源管理,简化拷贝逻辑。关键区别在于是否需避免资源共享问题。(150字)原创 2025-07-01 15:20:10 · 144 阅读 · 0 评论
分享