
C++ 编程基础
文章平均质量分 79
C++ 编程基础
一个不务正业的程序猿
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 编程基础(10)RAII(Resource Acquisition Is Initialization)机制
RAII(Resource Acquisition Is Initialization)是C++编程中的一种惯用法,用于管理资源(如内存、文件句柄、网络连接等)。它的核心思想是将资源的分配与对象的生命周期绑定在一起,确保资源在对象创建时获取,在对象销毁时释放。通过这种方式,可以有效地避免资源泄露和悬挂指针等问题。RAII是C++编程中的一种重要惯用法,它通过将资源的分配与对象的生命周期绑定在一起,简化了资源管理的逻辑,提高了程序的可靠性和可维护性。原创 2024-11-18 17:08:55 · 610 阅读 · 0 评论 -
C++ 编程基础(9)RTTI(Runtime Type Information)机制
C++中的RTTI机制提供了一种在运行时查询和操作类型信息的强大工具。然而,它并不是万能的,也有其限制和潜在的问题。开发者在使用RTTI时需要权衡其利弊,并根据具体的应用场景和需求来做出决策。在可能的情况下,应优先考虑使用C++的其他特性(如模板、多态等)来实现类型安全和灵活性的需求。原创 2021-07-30 20:32:54 · 3338 阅读 · 0 评论 -
C++ 编程基础(8)模版 | 8.4、类型萃取
可以通过模板特化自定义类型萃取。// 输出 0 (false)// 输出 1 (true)return 0;C++中的类型萃取是模板元编程的基础工具,通过头文件提供的工具,可以在编译时获取和操作类型信息,实现更灵活和高效的代码。原创 2025-02-25 17:47:11 · 413 阅读 · 0 评论 -
C++ 编程基础(8)模版 | 8.3、类模版
类模板的定义以template关键字开始,后面跟着一个模板参数列表(用尖括号< >包围)。模板参数列表可以包含类型参数(使用typename或class关键字声明)和非类型参数(如整数常量)。// 定义一个类模板private:T data;public:// 实例化模板为 int 类型// 实例化模板为 double 类型return 0;C++的类模板是创建通用类的强大工具,它允许程序员编写与数据类型无关的代码,从而提高代码的重用性和可维护性。原创 2024-11-18 11:16:46 · 321 阅读 · 0 评论 -
C++ 编程基础(8)模版 | 8.2、函数模版
函数模板的定义以template关键字开头,后面跟着一个模板参数列表(用尖括号< >包围)。模板参数列表中的参数可以是类型参数,也可以是非类型参数(如整数常量)。// 定义一个函数模板a : b;return 0;C++ 函数模板是一种强大的工具,它允许程序员编写与类型无关的代码,从而提高代码的可重用性和灵活性。通过模板参数,我们可以定义适用于多种数据类型的函数。此外,模板特化允许我们为特定类型提供特定的实现,从而满足特定需求。掌握函数模板的使用,将极大地提升C++编程的效率和代码质量。原创 2024-11-18 10:55:25 · 596 阅读 · 0 评论 -
C++ 编程基础(8)模版 | 8.1、泛型编程
泛型编程思想通过模板实现了与数据类型无关的代码编写,提高了代码的重用性、类型安全性和性能。随着编程语言的不断发展和优化,泛型编程的应用范围也在不断扩大,越来越多的库和框架开始采用泛型编程思想来提高代码的可重用性和灵活性。原创 2024-11-18 09:46:04 · 869 阅读 · 0 评论 -
C++ 编程基础(7)内存模型 | 7.3、存储持续性、作用域和链接
在C++编程中,理解变量的存储持续性、作用域和链接对于编写高效、可维护的代码至关重要。本文将详细介绍这三个概念,并通过示例说明它们在实际编程中的应用。原创 2024-11-18 14:32:52 · 680 阅读 · 0 评论 -
C++ 编程基础(7)内存模型 | 7.2、内存对齐
计算机中的内存是按字节(byte)划分的,从理论上讲对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型的数据按照一定的规则在内存空间上排序,而不是顺序的一个接一个的排放,这就是内存对齐。原创 2024-11-15 10:13:13 · 419 阅读 · 0 评论 -
C++ 编程基础(7)内存模型 | 7.1、内存类型
在C++编程中,内存管理是一个核心概念。了解不同类型的内存区域有助于我们编写更高效、更安全的代码。本文将详细介绍C++程序的五种主要内存类型:堆、栈、全局区、常量区和二进制代码区。原创 2024-11-15 09:56:59 · 406 阅读 · 0 评论 -
C++ 编程基础(6)作用域 | 6.3、类作用域
类作用域从类的左大括号开始,到右大括号结束。在这个范围内声明的所有成员(包括变量、函数、嵌套类型等)都属于这个类,并且只能在类的作用域内或者通过类的对象、指针或引用来访问。public:// 公共数据成员// 公共成员函数private:// 私有数据成员// 私有成员函数protected:// 受保护数据成员// 受保护成员函数类作用域是C++面向对象编程中的核心概念之一,它定义了类的成员如何被封装和访问。原创 2024-11-13 09:40:45 · 432 阅读 · 0 评论 -
C++ 编程基础(6)作用域 | 6.2、名称空间
如果在C++的头文件中将函数声明放在了一个特定的名称空间(例如Messi),那么相应的函数定义也需要放在同一个名称空间中。这是为了确保函数定义与声明匹配,并且编译器能够正确地识别它们。// 函数声明放在Messi名称空间// 函数定义未放在Messi名称空间调用displayint main()return 0;原创 2024-11-12 09:47:49 · 868 阅读 · 0 评论 -
C++ 编程基础(6)作用域 | 6.1、什么是作用域?
作用域是一个核心概念,它定义了变量、函数、类和其他标识符的可见性和生命周期。简单来说,作用域决定了在代码的哪些部分可以访问某个特定的标识符。C++提供了多种作用域类型,每种类型都有其特定的规则和用途。下面介绍下C++中的作用域概念,包括全局作用域、局部作用域、块作用域、函数作用域、类作用域以及命名空间作用域。全局作用域中的标识符在整个程序中都是可见的。这些标识符通常定义在所有函数和类的外部,包括全局变量、全局函数和常量。全局作用域中的变量在程序的整个生命周期内都存在,直到程序结束。原创 2024-11-12 14:30:23 · 449 阅读 · 0 评论 -
C++ 编程基础(5)类与对象 | 5.8、面向对象五大原则
在软件开发领域,面向对象编程(OOP)是一种重要的编程范式,它通过封装、继承和多态等特性,提高了代码的可重用性、灵活性和可维护性。C++作为一种强大的面向对象编程语言,充分体现了这些原则。在面向对象的设计中,有五大核心原则被广泛认可和应用,它们分别是:单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。下面,将逐一解析这五大原则在C++中的应用。原创 2024-11-14 16:26:45 · 1464 阅读 · 0 评论 -
C++ 编程基础(5)类与对象 | 5.7、友元
C++中的友元类与友元函数是一种强大的工具,它们允许程序员在保持类封装性的同时,实现对类内部数据的直接访问。然而,在使用时应谨慎考虑其对封装性、安全性和维护性的影响。只有在确实需要时才使用友元类和友元函数,以避免引入不必要的复杂性和潜在问题。原创 2024-11-14 10:53:15 · 1102 阅读 · 0 评论 -
C++ 编程基础(5)类与对象 | 5.6、运算符重载
文章目录一、运算符重载1、基本概念2、定义3、成员函数与友元函数重载4、注意事项5,示例:复数类的运算符重载前言:运算符重载是一种允许程序员定义或修改内置运算符行为的机制。通过运算符重载,可以使得类的实例能够使用像 +、-、*、/ 等运算符进行操作,就像基本数据类型一样。这不仅提高了代码的可读性,还增强了语言的表达能力。一、运算符重载1、基本概念运算符重载是通过在类中定义特殊的成员函数来实现的,这些成员函数具有特定的名称(即运算符符号)和返回类型。当对类的对象使用这些运算符时,C++编译器会原创 2024-11-13 10:01:15 · 407 阅读 · 0 评论 -
C++ 编程基础(5)类与对象 | 5.5、多态
要在C++中声明一个虚函数,只需在函数声明前加上virtual关键字即可。public:public:void func() override { // 使用override关键字确保正确覆盖C++中的多态性是一项强大的特性,它允许通过统一的接口来访问不同类型的对象,从而实现代码的高度复用和灵活扩展。然而,多态性的实现也带来了一定的性能开销和设计复杂度。因此,在使用多态性时,需要权衡其带来的好处和挑战,并根据具体的应用场景和需求来做出合理的选择。原创 2024-11-11 17:22:42 · 1185 阅读 · 0 评论 -
C++ 编程基础(5)类与对象 | 5.4、继承
在C++这一强大的编程语言中,继承是面向对象编程(OOP)的核心概念之一。它允许我们创建一个新的类(称为派生类或子类),这个新类可以继承一个或多个已存在的类(称为基类或父类)的属性和方法。通过继承,我们可以实现代码的重用、扩展和修改,从而构建更加复杂和灵活的软件系统。原创 2024-11-08 09:37:20 · 439 阅读 · 0 评论 -
C++ 编程基础(5)类与对象 | 5.3、封装
封装是一种面向对象的设计原则,它将数据(属性)和操作这些数据的方法(行为)捆绑在一起,并隐藏对象的内部细节。只有通过对象提供的方法才能访问或修改其内部数据,从而保护数据的完整性和安全性。封装是面向对象编程中的一个核心概念,通过将数据和操作这些数据的方法绑定在一起,并隐藏对象的内部细节,封装提高了代码的可维护性、安全性和可重用性。在C++中,通过类和访问控制符实现封装,并通过友元函数和友元类在必要时打破封装限制。原创 2024-11-07 09:39:13 · 500 阅读 · 0 评论 -
C++ 编程基础(5)类与对象 | 5.2、类
在C++中,类是一种用户定义的类型,它允许我们将数据(属性)和与这些数据相关的操作(方法)封装在一起。类的定义通常使用class关键字,后面跟着类名和一对花括号,花括号内包含了类的成员声明。// 成员变量(属性)// 成员函数(方法)C++中的构造函数是一种特殊的成员函数,其主要作用是初始化对象。当创建类的新实例时,构造函数会自动被调用,以确保对象从其诞生的那一刻起就处于有效和已知的状态。构造函数的名称必须与类名完全相同。构造函数没有返回类型,包括void也不允许。原创 2024-11-08 09:16:38 · 1035 阅读 · 0 评论 -
C++ 编程基础(5)类与对象 | 5.1、面向对象与面向过程
C++既支持面向过程编程也支持面向对象编程,这使得它成为一种非常灵活和强大的编程语言。面向过程编程适用于简单的、线性的任务,而面向对象编程适用于复杂的、需要高度模块化和可扩展性的系统。理解这两种编程范式的区别,并根据具体需求选择合适的编程方法,可以提高代码的质量和开发效率。原创 2024-11-07 09:25:29 · 902 阅读 · 0 评论 -
C++ 编程基础(4)函数 | 4.4、函数对象
函数对象是C++中的一种特殊类,它重载了operator()运算符,使其实例可以像普通函数那样被调用。函数对象不仅可以包含成员变量来保存状态,还可以定义任意复杂的逻辑。这使得函数对象在泛型编程和STL算法中非常有用。public:Adder(int n) : num(n) {} // 构造函数初始化成员变量// 重载 () 运算符private:int num;// 成员变量// 创建一个 Adder 对象,加数为 10// 输出结果为 25return 0;原创 2024-11-18 15:04:33 · 416 阅读 · 0 评论 -
C++ 编程基础(4)函数 | 4.3、函数重载
函数重载(Function Overloading)是一项强大的特性,它允许在同一作用域内定义多个同名函数,但这些函数的参数列表(参数的数量、类型或顺序)必须有所不同。这一特性不仅增强了代码的灵活性,还提升了代码的可读性和可维护性。原创 2024-11-11 17:45:56 · 447 阅读 · 0 评论 -
C++ 编程基础(4)函数 | 4.2、内联函数
内联函数是C++为了提升程序运行速度所做的一项改进,如果一个函数被定义成内联函数,在编译时编译器将使用相应的函数代码替换函数调用。内联函数比常规函数运行速度快,但是代价是需要占用更多内存。在函数声明前加上关键字inline在函数定义前加上关键字inline通常的做法是省略原型,将整个定义(即函数头与所有的函数代码)放在本应提供原型的地方。请求将函数作为内联函数时,编译器并一定会满足这种要求。原创 2024-11-04 17:49:44 · 457 阅读 · 0 评论 -
C++ 编程基础(4)函数 | 4.1、函数概述
在C++中,函数通过函数定义来创建,其语法包括返回类型、函数名、参数列表(可选)和函数体。函数指针是指向函数的指针变量。因此函数指针本质上是一个指针变量,只不过该指针变量指向函数。C/C++中,每一个函数都有一个入口地址,函数指针就指向函数的入口地址,可以通过函数指针来调用函数。return 0;// pfnFunc保存的就是func函数地址,pfnFunc与func值是一样的return 0;输出结果0040135000401350。原创 2024-11-04 17:44:49 · 286 阅读 · 0 评论 -
C++ 编程基础(3)数据类型 | 3.2、引用
在C++编程中,引用(reference)是一种非常重要的概念。引用允许你为一个已存在的变量创建一个别名,通过这个别名可以访问和修改原变量的值。与指针不同,引用在创建时必须绑定到一个对象,并且在程序运行期间不能改变其绑定的对象。本文将详细介绍C++中的引用定义、使用、操作以及一些高级特性。原创 2024-11-06 10:17:43 · 544 阅读 · 0 评论 -
C++ 编程基础(3)数据类型 | 3.1、指针
指针是一个变量,其存储的是另一个变量的内存地址,而不是数据值本身。在 C++ 中,每个变量都有一个内存地址,而指针就是用来存储这些地址的变量。指针的声明通常通过在变量类型前加上星号()来完成。int a = 10;// 定义一个整型变量 a,并赋值为 10// 定义一个整型指针 ptr,并将 a 的地址赋给 ptr指针是 C++ 编程中的一把双刃剑,它提供了对内存的直接操作能力,使得程序能够更高效地进行数据管理和访问。然而,不恰当的指针使用也可能导致严重的内存管理问题,如内存泄漏、野指针等。原创 2024-11-05 09:52:27 · 806 阅读 · 0 评论 -
C++ 编程基础(2)类型转换
在C和C++编程中,类型转换是一项基础且关键的操作,它允许程序员在必要时将一个数据类型转换为另一个数据类型。这种转换可以是显式的,也可以是隐式的,每种方式都有其特定的用途和潜在的风险。本文将深入探讨C/C++中的类型转换,包括其类型、使用场景、优缺点以及最佳实践。原创 2024-11-04 14:37:18 · 1319 阅读 · 0 评论 -
C++ 编程基础(1)宏定义
宏定义简单点说就是查找替换(文本替换),C中的宏分为两类,对象宏和函数宏。# define 宏名 字符串宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起替换宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。原创 2024-11-05 10:02:07 · 762 阅读 · 0 评论