自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 【C++】运算符重载

运算符重载的方法是定义一个重载运算符函数,在需要执行被重载的运算符时,系统自动调用该函数。格式:函数类型 operator 运算符名称(形参列表)运算符重载的规则C++不允许用户自己定义新的运算符,只能对已有的运算符进行重载。 C++不能重载的运算符只有五个,其他的都可以重载 .(成员访问运算符) .*(成员指针访问运算符) ::(作用域解析符) sizeof(长度运算...

2018-09-05 13:35:24 185 1

原创 【C++】解析this指针

一个类可以有多个对象,怎么能保证引用的是所指定的对象的数据成员呢?在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,即this。它是指向本类对象的一个指针,他的值是当前被调用的成员函数所在对象的起始地址。举例:#include<iostream> ...

2018-09-05 13:15:06 254

原创 【C++】虚继承如何解决了菱形继承的二义性问题

从代码分析:#include<iostream>using namespace std;class A{public: int _a;};class B :virtual public A{public: int _b;};class C :virtual public A{public: int _c;};class D :public B, p...

2018-08-12 21:12:54 812

原创 【C++】继承切片问题与类型转换

在下面的代码中,student继承了person,将子类对象赋给父类对象、发生了切片。上面代码中的赋值不存在类型转换,这里讨论一下类型转换问题:为什么上面赋值编译不通过?因为存在类型转换,i需要生成临时变量,在赋值给r2引用,而临时变量存在常(const)性,需要在前面加const。什么情况下可以发生切片?子类对象可以赋值给父类对象/父类指针/父类的引用。虽...

2018-08-12 19:35:16 612

原创 【C++】new/delete底层原理和new[]/delete[]

malloc和new的区别他们都是动态管理内存的入口。 malloc/free是C/C++标准库函数,new/delete是C++操作符。 malloc只是动态开空间释放空间,而new动态开空间并调用构造函数(初始化)和析构函数(清理) malloc/free需要手动计算类型大小且返回值为void*,new/delete可自己计算类型,返回对应类型的指针。new底层原理:开空间。调...

2018-08-11 11:49:03 869

原创 变量存在的内存空间问题

例:static int a = 10;int b = 10;void Func(){ static int c = 10; int d = 10; char* p1 = "hello"; char p2[] = "hello"; int* p3 = (int*)malloc(4);}问题:strlen(p1):5 strlen(p2):5 sizeof(p1...

2018-08-11 10:53:22 249

原创 【C++】const+内联+静态成员+友元

const修饰成员函数在成员函数后面加const,const修饰this指针所指向的对象,保证这个const成员函数的对象在函数内不会被改变。注意点:const对象对象不可以调用非const成员函数 非const对象可以调用const成员函数 const成员函数内不可以调用其他的非const成员函数 非const成员函数内可以调用其他的const成员函数operator+可...

2018-08-11 10:29:31 261

原创 【C++】类型萃取

为什么要用到类型萃取?在C++中,想要对数据进行拷贝的话,通常有两种情况内置类型 自定义类型对于内置类型,我们可以使用memmove或memcpy来进行拷贝而对于自定义类型,我们需要使用赋值的方式来进行拷贝示例代码如下:struct TrueType{ bool Get() { return true; }};struct FalseType{ boo...

2018-08-08 16:29:31 170

原创 【C++】实现顺序表模板类

#include<iostream>#include<string.h>using namespace std;template<class T>class SeqList{ public: SeqList(); SeqList(const SeqList<T>& seq); SeqList& o...

2018-08-08 15:25:24 540

原创 【C++】多态

多态:即多种形态,调不同的函数,完成不同的功能。多态的条件:调用的函数必须是虚函数的重写 必须是父类的指针或引用多态分为:静态多态:就是重载,在编译时决议。 动态多态:通过继承重写基类的虚函数实现的多态,在运行时决议。 多态原理:如果构成了多态,则与对象有关,与类型无关。什么是斜变?派生类重写基类的虚函数实现多态中,要求函数名,参数列表,返回值完全相同。而斜...

2018-07-29 19:00:25 149

原创 【C++】继承基础知识

继承方式和访问限定符的关系三种继承方式:公有继承 私有继承 保护继承关系:若基类的成员函数为私有,则派生类对基类的私有成员是不可见的,其他的标准为选范围小的为最终访问限定。保护成员限定符:一些基类成员不想被基类的对象直接访问,但需要在派生类中才能访问,就定义为保护成员。保护成员限定符是因继承才出现的。理解隐藏隐藏是指派生类的函数屏蔽了与其同名的基类函数。规则如下:如果...

2018-07-29 17:01:47 186

原创 【C++】引用计数写时拷贝

为什么要引入引用计数写时拷贝?使用浅拷贝不浪费内存空间却容易发生内存泄漏问题,使用深拷贝不会发生内存泄漏但是会不断开辟新的空间,内存利用率低。因此结合深浅拷贝的优点产生了写时拷贝。在String类中添加新成员变量_pcount来计算指向同一段内存空间的指针的数目,若果要修改成员变量,当指针数目为小于等于1时就可以释放空间,大于1则另开辟空间来保存新的数据。代码如下:#incl...

2018-07-18 11:03:30 241

原创 【C++】深浅拷贝实现String类

什么是深浅拷贝?定义字符串char* str1="hello";现在定义一个字符串char* str2和str1的数据相同,这种情况分两种;str1和str2数据和空间都相同,即str2指向str1 的地址空间。 str2另开辟空间,再将str1的数据拷贝给str2,即str1和str2数据相同,指向的地址不同。第一种情况叫做浅拷贝,第二种情况叫做深拷贝而在C++中,使用浅拷贝...

2018-07-18 08:55:47 227

原创 【C++】实现data类

//#include<stdio.h>#include<iostream>#include<assert.h>using namespace std;class Date{public: Date(int year = 1900, int month = 1, int day = 1)//全缺省参数构造函数 :_year(year) , _...

2018-07-10 19:42:19 1990

转载 【C++】赋值运算符重载的返回值分析

转载: https://blog.csdn.net/Always__/article/details/50532323其实对于重载赋值运算符,返回值是引用或者不是都行,代码都可以运行,之所以用引用是为了提高代码效率,为什么引用就会提高代码效率呢?对于返回值是CMystring时(非引用)。返回时,会自动生成一个临时对象来保存返回的这个内容,然后通过拷贝构造函数返回给调用这个函数的对象(*this)...

2018-07-03 20:56:57 3037

原创 【C++】构造函数、析构函数、拷贝构造函数

构造函数概念:成员变量为私有的,需要用一个公有函数来对他们进行初始化。同时这个函数有且仅在定义对象时自动执行一次。特点:函数名和类名相同无返回值对象构造(对象实例化)时系统自动调用对应的构造函数。构造函数可以重载构造函数可以在类中定义,也可以在类外,在类外定义需要指定类域。如果类中没有给出构造函数,C++编译器会自动生成一个缺省的构造函数。但是只要我们自己定义了缺省的构造函数,编译器就不会再生成。...

2018-07-03 20:55:53 552

原创 【C++】类和对象

什么是面向对象?面向对象程序设计(OOP):对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装在其中,以提高软件的重用性,灵活性和扩展性。C++不是纯面向对象语言,而是基于面向对象的语言。面向对象的三大特性:封装,继承,多态类的大小?类的大小取决于类中所有成员变量的大小之和,也遵循内存对其原则。为什么要内存对齐?1.平台问题(移植原因)不是所有的硬件平台都能访问任意地址上的任意数据的;...

2018-06-30 18:04:59 190

原创 【C++】引用和指针

引用概念:引用不是定义一个新的变量。而是给一个已经定义的变量起一个别名。因为引用不需要额外开辟空间。用法:类型 &引用变量名=已定义过的变量名void TestReference2 (){    int d1 = 4;    const int & d2 = d1;    d1 = 5; // d1改变 d2的值也会改变。    //d2 = 6; // 不能给常量(不能...

2018-06-30 17:41:37 166

原创 【C++】C++入门介绍

C++与C:C++是C的增强版,C几乎是C++的一个子集,所以C语言支持的语法在C++基本都支持并需要使用。为什么C++支持重载,C语言不支持?1.函数重载:在同一作用域类,一组函数的函数名相同,参数列表不同(个数/类型不同),与返回值无关。不仅函数可以重载,运算符也可以重载。注意:main函数不能重载,因为程序的入口只有一个。2.翻译过程一般分为: 预处理—-编译——汇编——链接 预处理:展开头...

2018-06-30 16:33:53 200

原创 【总结】进程信号

kill -l:查看所有进程号:

2018-06-19 10:18:23 271

原创 IO多路转接之epoll

为处理大量句柄而作改进的poll创建epoll模型int epoll_create(int size);在内核里创建epoll模型:创建红黑树创建队列建立底层回调机制注册事件int epoll_ctl(int epfd,int op,int fd,struct epoll_event *event);epfd:epoll_create的返回值。op:表示处理动作。EPOLL_CTL_ADD:注册新...

2018-06-13 17:45:16 128

原创 IO多路转接之poll

poll函数#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds,int timeout);pollfd结构struct pollfd { int fd; /* file descriptor */ short events; /* r...

2018-06-13 16:31:35 241

原创 IO多路转接之select

系统提供select函数来实现多路转接。调用select函数接口的特点:一次需要等待多个文件描述符。select函数原型:#include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select(int nfds, fd_set *readfds, fd_set *writef...

2018-06-13 16:17:25 149

原创 C语言实现快速排序

快速排序方法:从左边开始找比基准值大的元素,从右边找比基准值小的元素,交换两个元素缺点:如果所给元素序列为逆序的,那么快速排序的时间复杂度很糟糕。            长序列对递归排序来说不友好。时间复杂度:平均O(NlogN),最坏O(N)空间复杂度:最坏O(N);稳定性:不稳定排序int _QuicSort(int arr[], int beg, int end){ if ((end-be...

2018-05-29 16:01:17 551

原创 C语言两种方法实现归并排序

递归实现归并排序思想使用递归的方法来分元素使用临时数组来保存排好序的元素把临时数组中的元素拷贝给原数组void mergeAdd(int arr[], int left, int mid, int right, int *temp){实现“治” int i = left; int j = mid + 1; int k = left;//临时下标 while (i <= mid&amp...

2018-05-29 12:51:40 18540 8

原创 TCP如何保证可靠性

确认应答机制TCP将每个字节的数据都进行了编号,即为序列号每个ACK都带有对应的确认序列号,意思告诉发送者,我已经收到了哪些数据,下一次你从哪里发超时重传机制可能性一:主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B。如果主机A在一个特定的时间间隔内没有收到B发来的确认应答,就会进行重发。可能性二:主机发送完数据未收到B发来的确认应道,可能是ACK丢失了那么会导致主机A再次发送上...

2018-05-28 16:28:56 335

原创 【C语言】冒泡排序,选择排序,插入排序,堆排序

冒泡排序///////////////冒泡////////////////void BubbleSort(int arr[], int len){ if (len <= 1){ return; } int bound = 0; for (; bound < len; bound++){ int cur = len - 1; for (; cur>bound;...

2018-05-28 15:11:44 296

原创 【数据结构】位图

使用哈希表存储数据的时候一般都是开辟字节空间来存储数据。使用位图就可以通过改变比特位来存储数据。例如;我们要判断是否存在index这个数据位图和哈希表比较:哈希表中可以存储键值对等结构体,位图只能修改0和1.位图的使用:通常用来判断数据是否存在代码模拟实现位图bitmap.h#include<stdint.h>#include<stddef.h>typedef stru...

2018-05-23 17:31:49 153

原创 哈希表

为什么要引入哈希表?顺序搜索以及二叉搜索树中,元素存储位置和元素各关键码之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数。我们希望可以不经过任何比较,一次直接从表中得到要搜索的元素。哈希表的特点通过哈希(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。  哈希冲突通过计...

2018-05-22 09:15:02 262

原创 进程间通信---管道通信

进程间通信为什么有那么多不同的方法?资源的不同,所以通信的方式不同。想要获取管道资源,就需要用管道来通信,想要获取消息队列资源,就需要用消息队列来通信。如上所示,一个进程就是一个PCB,PCB中的file_struct有三个默认文件描述符(0,1,2),下面就是file文件描述符,匿名管道中父子进程共享代码,所以,父子进程指向同一个文件描述符,我们把这种文件的通信方式称之为管道管道的特点:管道通信...

2018-05-21 15:12:14 265 1

原创 TCP基础

TCP协议(传输控制协议)特点:面向连接        面向字节流        可靠传输TCP报头协议源端口/目的端口号:表示数据从哪里来,到哪个进程去序号:tcp报文按序发送确认号:告诉发送者,我已经收到了那些数据4位TCP报头长度:表示该TCP头部有多少个32位bit,所以TCP头部最大长度为15*4=60;6位标志位:URG:紧急指针是否有效ACK:确认号是否有效PSH:提示接收端应用程序...

2018-05-19 21:31:11 220

原创 熟悉结构体-结构体的内存对齐

结构的声明注意问题。在声明结构体的时候,可以不完全声明。结构体的成员可以是标量,指针,数组,甚至是    其他结构体结构体成员的访问结构变量的成员是通过点操作符(.)访问的。如果是结构体指针,则用(->)结构体的自引用struct Node{ int data; struct Node* next;//必须是指针};结构体内存对齐为什么要存在内存对齐?1.平台问题(移植...

2018-05-18 11:05:52 260

原创 C语言实现二叉搜索树的基本操作

简述二叉搜索树二叉搜索树又称二叉排序树,它或者是一棵空树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树searchTree.htypedef char SearchType; typedef struct SearchNode { SearchType key; // 关键码 ...

2018-05-17 14:02:18 360

原创 C语言实现堆的基本操作

认识堆1. 堆是一个完全二叉树2. 堆有两种, 一种叫小堆(小根堆, 最小堆), 一种叫大堆(大根堆, 最大堆).  3. 以小堆为例, 这个树的根节点是这个树中的最小的元素 对于任意一个子树来说, 子树的根节点, 小于左右孩子节点的值.  4. 以大堆为例, 这个树的根节点是这个树种的最大元素  对于任意一个子树来说, 子树的根节点, 大于左右孩子节点的值. 堆的特点:如果i=0,结点i是根节点...

2018-05-17 13:46:05 1049

原创 二叉树的相关操作

1.定义二叉树的结构体#pragma once #include typedef char TreeNodeType; typedef struct TreeNode { TreeNodeType data; struct TreeNode* lchild; //左孩子指针 struct TreeNode* rchild; //右孩子指针} TreeNode; 2.初始...

2018-05-14 12:53:21 178

原创 TCP编程(多进程版本)

TCP:传输控制协议。特点:传输层协议          有连接          面向字节流          可靠传输UDP编程思想server.csocket()服务器创建套接字bind()绑定端口号listen()监听客户端发来的请求accept()接受client请求接收成功,为客户端提供服务service()代码:问题:为什么要创建孙子进程?服务器端可以创建多个子进程去处理客户端发来的...

2018-05-13 14:25:14 319

原创 UDP编程

UDP:用户数据报协议特点:传输层协议        无连接        不可靠传输        面向数据报网络字节序内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端和小端之分,网络数据流同样有大端和小端之分。以下规定:发送主机通常发送缓冲区的数据按地址从低到高的顺序发出。接收主机把从网络接到的字节依次保存在接收缓冲区中,也是按内存地址从低...

2018-05-13 07:29:55 166

原创 网络基础知识

计算机网络背景独立模式:计算机之间相互独立。网络互连:多台计算机连接在一起,完成数据共享。共享数据由服务器集中管理。局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起。广域网WAN:将远隔千里的计算机都连在一起。网络协议:网络协议是以层状分层的。分层的最大好处在于封装。协议涉及如何实现本层服务,类似于说明书OSI七层模型最大优点:将服务,接口,协议这三个概念明确的区分开来。服务:说明某一...

2018-05-11 23:16:59 173

原创 【C语言】链表实现消费者生产者问题

这里的代码围绕一个生产者和一个消费者来分析,生产者生产一个产品,消费者才能使用一个产品,消费者和生产者是同步关系。一:不加同步互斥锁pthre#include<stdio.h>  #include<stdlib.h>#include<pthread.h>typedef struct _Node{    struct _Node* next;    int dat...

2018-04-30 13:46:01 605

原创 线程

线程概念在⼀一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。Linux下线程的特点Linux的线程是通过进程来模拟的,也就是说Linux里的线程本质上就是进程进程和线程的区别进程是资源竞争的基本单位线程是程序执行的最小单位线程共享进程数据,但也拥有⾃自⼰己的一部分数据: >* 线程ID >* 一组寄存器...

2018-04-24 12:22:25 7406

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除