C/C++
文章平均质量分 84
讲解C/C++基础
小太阳....
这个作者很懒,什么都没留下…
展开
-
实现一个简单的定长内存池
一、内存池内存池是一种动态内存分配与管理技术,程序员习惯直接使用new、delete、free、malloc等这些API申请和释放内存,这样导致的后果:由于申请的大小不固定,频繁的使用会造成内存碎片从而降低程序和操作系统的性能。内存池则是在使用时,先申请一大块内存留做备用,当程序需要使用时,就直接使用内存池中的内存,当程序要将内存释放时,就先释放到内存池中。当再次申请时,就再次从内存池中取出使用。这样可以避免频繁的找系统申请,大大加快了系统的性能。1.1、好处1、我们一次性向系统申请一大块内存,这样原创 2021-06-30 22:02:00 · 320 阅读 · 3 评论 -
C++--继承(继承的概念与定义、派生类默认成员函数、菱形继承及菱形虚拟继承)
一、继承的概念及定义1、继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新的功能,这样产生新的类,新类称为派生类或基类。继承是类设计层次的复用,呈现了面向对象程序设计的层次结构。class Person {public: void Print() { cout << "name:" << _name << endl; cout << "age:" << _ag原创 2021-05-02 19:38:45 · 803 阅读 · 1 评论 -
STL--vector容器介绍和使用以及迭代器失效问题
一、vector的介绍1、vector是表示可变大小的序列容器。2、就像数组一样,vector也采用的连续存储空间来存储元素。也就意味着可以采用下标对vector的元素进行访问和数组一样高效。但是又不像数组,它的大小可以动态改变的,而且它的大小会被容器自动处理。3、本质讲,vector使用动态分配数组来存储它的元素。当新元素插入的时候,为了增加存储空间这个数组需要被重新分配。其做法是分配新的数组,然后将全部元素移到新的数组中。就时间而言,这是一个相对代价较高的任务,但是vector并不会每次都重新分配原创 2021-04-28 17:20:11 · 293 阅读 · 1 评论 -
STL--vector模拟实现
一、前言在另一篇博客中我已经写了:vector容器介绍和使用以及迭代器失效问题,那么在这篇博客中我将要模拟实现一个简单的vector,对vector实现基本的增、删、改。下图是vector的基本结构:二、vector的成员、构造、析构、迭代器的基本实现#pragma once#include<iostream>#include<assert.h>namespace Myvector{ template<class T> class vector {原创 2021-04-28 17:19:37 · 498 阅读 · 3 评论 -
C++string类(现代写法、传统写法以及模拟实现)
为什么学习stringC语言中的字符串C语言中,字符串是以‘\0’结尾的一些字符的集合,为了操作方便,C标准库提供了一些str系列的函数,但是这些库函数是与字符串分开的,不符合OOP思想,而且底层空间需要用户自己管理,稍不留神就会发生越界访问。stringstring是一个类,对于底层空间自己管理,不会发生越界访问。string使用起来方便、快捷、简单。string的常用接口string类对象的构造函数名称功能说明string() (重点)构造空的string类对原创 2021-04-17 15:04:00 · 687 阅读 · 1 评论 -
C++入门--友元、静态成员、单例设计模式、成员变量和函数的存储
友元类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部访问,但是我们有时候需要在类的外部访问类的私有成员。那么我们可以使用友元来解决,友元是一种特权,允许访问类的私有成员。友元分为:友元函数和友元类。友元函数友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但是需要在类的内部声明,声明时需要加friend关键字。实例代码:class Date{ friend ostream&(ostream& cout,const Date& da原创 2021-02-15 16:00:28 · 247 阅读 · 1 评论 -
C++入门--运算符重载
运算符重载C++为了增强代码的可读性引入了运算符重载,对已有的运算符重新进行定义,赋予其另一种功能,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。运算符重载的定义函数名字:operator后面接需要重载的运算符符号。函数原型:Type operator操作符 (参数列表)。注意■ 1、不能通过连接其他符号来创建新的操作符:比如operator@。■ 2、重载操作符必须有一个类类型,没有类型那么根本没有意义。■ 3、用于原创 2021-02-14 10:13:45 · 225 阅读 · 1 评论 -
C++入门--构造函数、拷贝构造函数、析构函数
构造函数构造函数:主要作用在于创建对象时为对象的成员属性赋值,由编译器自动调用,无须手动调用。在对象的生命周期中只调用一次。特性特性如下:■ 1、函数名和类名相同。■ 2、没有返回值,而且不能有void。■ 3、有参数,支持重载。■ 4、对象实例化时编译器自动调用对应的构造函数。class Date{public: //无参构造函数 Date(){ } //有参构造函数 Date(int year,int month,int day){ _year=year; _mo原创 2021-02-08 15:50:21 · 408 阅读 · 0 评论 -
C++入门--引用的本质、const限定符、this指针、nullpter
引用引用的概念引用不是新定义一个变量,而是给已存在变量去一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。引用定义:类型& 引用变量名(对象名) = 引用实体;int main(){ int a=10; int &b=a; cout<<"a的地址:"<<&a<<endl; cout<<"b的地址:"<<&&b<<endl; return 0;原创 2021-02-06 21:24:04 · 288 阅读 · 0 评论 -
C++入门--命名空间、函数默认参数、函数重载、内联函数
命名空间C/C++中,变量、函数和类都是大量存在的。这些变量、函数和类都将存在于全局作用域中,可能会有很多冲突。使用命名空间的目的就是对标识符的名字进行本地化,以避免命名冲突和名字污染,于是namespace关键字出现了。命名空间定义定义命名空间:用namespace关键字,后面跟命名空间的名字,然后是一对 {},{}中即为命名空间中的成员。//1.命名空间下可以放函数,变量和类,结构体以及命名空间//2.命名空间必须定义在全局作用域下//3.命名空间可以嵌套命名空间namespace原创 2021-02-03 17:54:05 · 225 阅读 · 0 评论 -
C/C++源文件到可执行文件、C++能重载C语言不能重载本质
C/C++源文件到可执行文件翻译环境过程总结:■ 1、组成一个程序的每个源文件通过编译过程分别转换为对应的每个目标文件。■ 2、每个目标文件通过链接器捆绑在一起,形成单一而完整的可执行程序。■ 3、链接器同时也会引入标准C/C++库函数中任何被该程序所用到的函数,而且还会搜索程序员个人的程序库,将其需要的函数也链接到程序中来。翻译环境中的每一步具体干了什么每个过程总结:■ 1. 预处理:为正式编译做准备。1.头文件展开。2.宏替换。3.去掉注释。在Linux环境下用命令gcc -E原创 2021-02-01 22:03:14 · 282 阅读 · 6 评论 -
C语言动态内存管理、柔性数组
C语言动态内存管理为什么有动态内存管理//没有动态内存分配之前我们掌握开辟的内存的方式有:double a=10; //在栈上分配8个字节大小的空间char ch[10]; //在栈上分配一段连续的空间以上述方式开辟的内存有一下特点:■ 空间开辟的大小是固定的■ 数组在申明的时候,必须用一个常量来指定数组的长度,所需要的内存在编译时就已经在栈上分配好了总结:在实际情况中我们对内存的需求,不止上述情况,有时我们需要的空间大小在程序运行的时候才能知道,那对于数组的定义上述方式就不能满足需求原创 2020-12-09 17:36:55 · 281 阅读 · 1 评论 -
C/C++ 内存模型
C/C++ 内存模型内存模型图程序运行前在程序编译后,生成了可执行的exe文件,未执行该程序前分为两个区域。■ 代码区:存放函数体(类成员函数和全局函数)的二进制代码 共享:对于频繁执行的程序,内存中只需要一份就可以只读:防止程序意外修改其指令■ 全局区:全局变量、静态变量 全局区中还包括常量区(字符串常量、其他常量(const修饰))也放在全局区特点:该区域的数据在操作系统运行结束之后由操作系统释放【测试全局区】//测试全局区int g_a = 10;int原创 2020-12-07 17:24:39 · 1109 阅读 · 0 评论 -
C语言浮点数、整数在内存中的存储
数据的基本介绍在 C 语言中,变量的类型决定了变量开辟内存空间的大小,如何看待内存空间的视角。整数类型类型存储大小值范围char1 字节-128 到 127 或 0 到 255unsigned char1 字节0 到 255signed char1 字节-128 到 127int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647unsigned int2 或 4 字节原创 2020-12-02 22:34:20 · 744 阅读 · 2 评论 -
C语言字节对齐、位域、枚举、联合体
C语言字节对齐什么是字节对齐现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。为什么要字节对齐■ 平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址 处取某些特定类型的数据,否则抛出硬件异常。 ■ 性能原因: 数据结构(尤其是栈)应该尽可能地在原创 2020-12-01 16:55:50 · 3611 阅读 · 9 评论 -
C常用字符串模拟、内存重叠问题
C常用字符串函数模拟当我们在模拟字符串函数的时候需要注意两点:■ 检查参数合法性■ 对指针进行参数保护字符串长度strlen注意点:字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。注意函数的返回值为size_t,是无符号的(易错)。//注意返回值是size_tsize_t my_strlen(const char *string) { assert(strin原创 2020-11-28 22:32:00 · 3397 阅读 · 8 评论 -
我的第一篇博客
我的第一篇博客自我介绍Hi,大家好,我是来自成都信息工程大学的一名大学生,今年已经大三了。自己比较喜欢有逻辑性的东西,喜欢抓住本质,以不变应万变。这是我认真写博客的第一篇。之前有写过博客,但是其实都是自己将自己所看的学习视频中的一些归纳总结直接截图,将图片粘贴在博客上面。啊。。。。这就有点显得老混了。编程目标你要问我编程的目标,那我就只能告诉你这一切都是为了钱。为了改变家里已经我未来的生活质量。有句话不是这样说的吗?人为才死,鸟为食亡。最初专业的时候就是看着来钱快才选择这个专业的。怎么学习编程第原创 2020-11-07 23:56:55 · 156 阅读 · 0 评论