- 博客(70)
- 收藏
- 关注
原创 RTP封装,UDP发送并用wireshark抓rtp包
1. 先上code客户端:#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/time.h>#include <arpa/inet.h>#include <netin...
2019-11-28 15:13:27
973
1
原创 C++类 用组合模式 写文件目录
#include <iostream>#include <list>#include <string>#include <algorithm>#include <vector>using namespace std;// 文件(普通文件、目录)基类class IFile{public: virtual ~IF...
2019-01-28 20:09:31
465
原创 封装、继承、多态
1、不要用基类指针操作派生类对象数组 ===&gt; 基类和派生类的步长不一致2、虚析构函数:===&gt; 通过基类指针释放派生类对象#include &lt;iostream&gt;// 封装:信息隐藏,对外提供访问控制// 继承:代码复用// 多态:功能扩展using namespace std;class Animal{public: virtual ...
2019-01-27 21:51:19
222
原创 用C++写建造者模式
根据 大话设计模式 第13章的建造者模式,用C++实现一遍#include <iostream>#include <vector>#include <string>using namespace std;//Product类——产品类,由多个部件组成class Product{public: void Add(string part)...
2019-01-27 21:40:30
229
原创 用简单工厂设计模式写加减乘除运算
#include <iostream>#include <string>using namespace std;class Operator{public: void set(int a, int b) { this->m_a = a; this->m_b = b; } virtua...
2019-01-26 21:02:11
667
1
原创 虚继承
#include <iostream>using namespace std;// 虚继承: 解决多继承中的二义性 ===> 仅适用于有公共基类的情况// 继承之前添加一个关键字: virtual ===> 会为派生类添加一个 虚基类表(vbptr) 指针// 虚继承的情况下派生类中的对象排序 : 虚基类指针排列在最前面// 1、排列非虚继承的...
2019-01-22 21:36:41
133
原创 多继承
#include <iostream>using namespace std;// 多继承class Parent1{public: void setP1(int a, int b) { this->a = a; this->b = b; } void show1 () { ...
2019-01-22 21:36:13
125
原创 对象的构造
#include <iostream>using namespace std;// 对象的构造: 谁的成员谁负责初始化 ---> 手动调用相应的构造函数 ---> 在对象初始化列表中class Parent{public: Parent() { cout << "无参构造" << endl; ...
2019-01-22 21:35:36
134
原创 对象模型
#include <iostream>using namespace std;// 对象模型 类型兼容性原则class Parent{public: Parent() {} Parent(const Parent &obj) { cout << "拷贝构造被调用" << endl; ...
2019-01-22 21:35:09
287
原创 左移、右移运算符重载
#include <iostream>using namespace std;class Complex{ friend ostream &operator <<(ostream &out, Complex &c); friend istream &operator >>(istream &in...
2019-01-22 21:34:38
2405
3
原创 ++、--运算符重载
#include <iostream>using namespace std;class Complex{ friend Complex &operator ++(Complex &c); friend Complex operator ++(Complex &c, int);public: Complex(int a = 0...
2019-01-22 21:34:03
2940
原创 运算符重载
运算符重载:1、外部实现2、内部实现:外部到内部 ----> 去掉左操作数,由this指针代替注意:1、不能改变运算符的优先级2、不能改变运算符的操作数个数3、不能自创运算符4、同一种运算,内部和外部实现只能存在一个#include <iostream>using namespace std;// a+bi 1+2i 复数class Comple...
2019-01-22 21:32:53
161
原创 类中的 static 的用法、类、友元
类中的 static 的用法1、类的静态成员变量,该属性不属于某个成员,是类的属性,是所有成员所共享的2、静态成员变量必须要在类的外部进行初始化3、静态成员(变量、函数)使用方式:通过变量使用通过类名使用4、静态的成员函数 只能使用静态的成员变量public: int m_a; int m_b; static int m_sa;};int Test::m_...
2019-01-22 21:32:05
272
原创 对象初始化列表、深拷贝
对象初始化列表:构造函数后加 “ :”, 后面接上要初始化的成员,各个成员之间以逗号进行区分Test(int a, int b): m_a(),m_b(b){}1、对象初始化列表的执行要优先于 构造函数2、对象的初始化顺序和对象在初始化列表中所在位置无关,和在类中的声明顺序有关拷贝构造: 类型(const 类名& 变量名)Test(const Test &obj) ...
2019-01-22 21:30:37
373
原创 构造函数
如果类中一个构造函数都没有,系统会自动添加一个 无参构造数,该函数什么都不做如果类中没有析构函数,系统会自动添加一个析构函数,该函数什么都不做// new : 创建会自动调用构造函数// delete : 释放对象的时候会自动调用析构函数构造函数:在创建的对 象的时候系统自动调用的函数===> 初始化对象1、构造函数的函数名和类型相同2、没有返回值3、构造函数可以重载...
2019-01-22 21:29:14
159
原创 面向对象编程
面向 对象 编程实现通讯录:面向过程:有哪些功能:增加用户、删除用户、修改、查找…面向对象:通讯录实现有哪个东西(对象) --> 用户、用户管理(操作用户:加用户、删除用户、修改、查找…)===> 一个场景 场景的东西(对象) 通过某种机制(激励),让各个对象动起来面向对象三个特性:(抽象)、封装、继承、多态封装:1、将对象的属性(变量)和方法(函数)整合到一起...
2019-01-21 00:16:48
119
原创 C++基础知识
动态内存分配1、c中 使用 malloc 和 free = = => 库函数 不是语法的一部分2、C++中 使用 new 和 delete ===> 运算符(+、-、*…) 是语法的一部分strlen 是函数,计算字符串长度 sizeof 运算符 计算变量类型所占空间大小一、 申请单个变量空间int *p1 = (int *)malloc(sizeof(int...
2019-01-21 00:14:08
175
原创 C++基础知识
内联函数:define1、定义常量 宏常量 = => 建议 const 进行替换2、定义函数 宏函数 = => 建议 内联函数 进行替换内联函数:在函数定义前 加 inline 关键字,那么该函数就是内联函数, 函数声明前加是无效的内联函数在函数调用的 用函数定义去替换,避免了函数的入栈、出栈、跳转等开销内联函数是在编译的时候处理的,宏函数是在预...
2019-01-21 00:11:25
152
原创 C++基础知识
引用1、引用的概念引用:空间的别名类型 &别名 = 其他变量// a 是变量名,代表一个4字节的空间int a = 10;// b 是 a 所代表的的空间的别名// b 和 a 代表的是同一块空间 int &b = a;b = 20;cout << "a = " << a << endl;// 定义引用的时候必须要赋予...
2019-01-21 00:08:50
107
原创 C++基础知识
1、函数的默认参数:允许形参带一个默认的值,当函数调用的时候没给形参传值,使用默认的值int add(int a, int b = 10){}注意:如果函数有一个参数有默认值,则该参数右边的所有参数都要有默认值给形参设置默认值的时候,函数声明和函数定义不能同时赋值2、 函数占位参数:形参只有类型,没有变量名void func2(int a, int b, int){}占位...
2019-01-20 22:54:01
96
原创 C++基础知识
&、bool、三目运算符C++认为结构体是一个新的类型,所以可以直接定义变量新增的bool类型:只有两个值 true (1)和 false(0)bool类型和float类型与 0 进行比较浮点型数据和 0 比较需要精度三目运算符可以作为左值来使用(a>b ? a : b) = 100;结果中不能存在常量拷贝构造: 类型(const 类名& 变量名)Tes...
2019-01-20 22:50:40
152
原创 C++基础知识
C++ 的标准输入输出头文件 input output streamcout 类似于 printf, 作用是往屏幕打印数据区别: cout 是个变量 printf 是个函数<< :左移操作符 和 cout 结合后功能变了,可以理解为数据流向:数据从右边流向左边右边是 字符串 左边是屏幕 ==> 字符串 --> 屏幕endl 是一...
2019-01-20 22:47:48
95
原创 C++基础知识
C++中的 const修饰的是一个常量:const常量正常情况下内存不会为其分配空间,而是存在符号表中使用的时候去符号表中取值如果对const常量进行取地址操作,则编译器会为其分配一块空间,但是,它本身并不会使用建议用 const 替换 宏常量建议用 const 替换 宏常量const 和 define 的区别define是预处理的处理,做的工作是完全替换,在程序中会有多个备份...
2019-01-20 22:43:32
243
原创 TCP/UDP
协议栈Linux的优点之一就是在于它丰富而稳定的网络协议栈,其范围是从协议无关层(如通用的socket层接口和设备层)到各种网络协议的实现;对于网络理论介绍一般采用OSI模型,但是Linux中网络栈的介绍一般分为四层的Internet模型第七层:应用层 数据 用户接口,提供用户程序“接口”。第六层:表示层 数据 数据的表现形式,特定功能的实现,如数据加密。第五层:会话层 数据 允许...
2019-01-02 20:26:46
117
原创 互斥量
进程间同步---->互锁---->互斥量互斥量:初始化上锁 P 会阻塞 lock 防止生产者、消费者同时进入解锁 v unlock销毁初始化互斥量用一个pthread_mutex_t型的变量表示。使用互斥量之前需要对它进行初始化,其接口函数原型如下:int pthread_mutex_init(pthread_mutex_t *mutex, const ...
2018-12-28 20:11:44
150
原创 线程同步
当多个线程共享相同的内存时,需要确保每个线程看到一致的数据。如果每个线程使用的变量都是其他线程不会读取或修改的,那么就不存在一致性问题。同样地,如果变量是只读的,多个线程读取该变量也不会有一致性问题。但是,当某个线程可以修改变量,而其他线程也可以读取或者修改这个变量的时候,就需要对这些线程进行同步,以确保它们在访问变量的存储内容时不会访问到无效的数值。信号量通常有两种:二进制信号量和计数信号量。...
2018-12-27 23:24:31
108
原创 进程间通信
为什么进程间要通信数据传输一个进程需要将它的数据发送给另一个进程资源共享多个进程之间共享同样的资源通知事件一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事情。进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。关闭管道关闭管道只需要将两个文件描述符关闭即可,可以使用普通的clos...
2018-12-25 21:05:31
86
原创 C语言文件操作
系统编程: 文件操作、进程控制、进程间通信、多线性编程、网络编程 ===> 系统函数 ===>系统调用数据库阻塞:读的时候如果没有可读的数据,则等待,一直到有数据可读才往下运行对于读来讲 —> 只有设备文件和网络文件会阻塞 常规文件读的时候不会阻塞#include <stdio.h>#include <sys/types.h>#incl...
2018-12-20 19:37:54
456
原创 用C语言实现随机分组
/*要求将下列名单随机分组:分组要求,随机选择4个人组成一组输出结果:4个人一行进行输出,每行代表一个组例如:许新华 王玉恒 陶小康 王娇娇盛 开 郑 丹 陈 芳 张 龙陈梦玉 祝秋培 吴赟鹏 胡光兴曾从威 边金鹏 陈逸伦 王 琦刘加封 徐煜清 姚 笛 孔海宇孙凌霄 王 鹏 王 虎 李 峰周 波 蒋恺均 徐小蕤 缪 ...
2018-12-19 22:38:58
2770
1
原创 C语言排序
冒泡排序#include <stdio.h>void mySwap(int *a, int i, int j){ int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}void myPrint(int *a, int len){ int i; for (i = 0; i < len; i++) { printf ("...
2018-12-18 23:45:43
139
原创 二叉数
void pre_node(BTreeNode *node){ if(NULL == node) return; printf("%4c", node->data);//根 pre_node(node->lchild);//左 pre_node(node->rchild);//右}void mid_node(BTreeNode *node){ if(N...
2018-12-17 23:35:50
133
原创 C语言深度解剖读书笔记3
int *p = NULL 和 *p = NULL 的区别int *p = NULL;可以通过调试器查看p的值为 0x00000000 。这句代码的意思是:定义一个指针变量p,其指向的内存里面保存的是 int 类型的数据;在定义变量p的同时把p的值设置为 0x00000000,而不是把 *p 的值设置为0x00000000 。这个过程叫初始化。int *p;*p = NULL;第一行...
2018-12-17 11:13:50
178
原创 C语言深度解剖读书笔记3
预处理名称意义#elif与else if 相同#line改变当前行数和文件名称,是在编译程序中预先定义的标识符命令的基本形式:#line number [ " filename " ]#error编译程序时,只要遇到#error就会生成一个编译错误提示消息,并停止编译#pragma可以设定编译程序完成一些特定的动作,它允许向编译程序传送各种指令。...
2018-12-15 23:52:20
156
原创 getchar() 与缓冲区
上一篇博客中的最后两句是睡前加进去的,就没有进行调试,printf ("\t\t按Enter键返回\n\t\t");getchar();使用getchar()来 使程序暂停运行,但今天发现getchar并没有起到我想要的作用,程序好像都没有走getchar,或者直接跳过了这一句。主要原因是因为上面的while语句中使用了scanf函数。scanf函数C语言中输入函数scanf使用不当...
2018-12-14 20:56:12
380
原创 C语言编写停车场
#include <stdio.h>#include <time.h>#include "park.h"#include <string.h>#include <stdlib.h>enum {Park = 1, Leave, Display, Exit};#define SIZE 10typedef enum {FALSE, TR...
2018-12-13 23:08:50
829
1
原创 队列
头文件typedef enum{FALSE = 0, TRUE} BOOL;typedef int Data;typedef struct node{ Data data; struct node *next;}Node;typedef struct queue{ //Node *list;//考虑头指针空不空,头结点不用考虑 Node *front; Node *re...
2018-12-11 20:19:35
77
原创 部分链表题
#include <stdio.h>BOOL Insert_Last(List *ls, Data data){ if (NULL == ls) return ERROR; Node *node = (Node *)malloc(sizeof(Node)/sizeof(char)); if (NULL == node) return ERROR; node...
2018-12-10 11:09:56
159
原创 Ubuntu环境下++i与i++
#include <stdio.h> int main(){ int i = 0; int s = 0;// s = i++ + ++i + i++;//i=3,s=6// s = i++ + ++i + ++i;//i=3,s=5// s = i++ + i++ + ++i;//i=3,s=4// s = i++ ...
2018-12-08 11:41:25
216
原创 C语言标准符号
符号名称符号名称,逗号>右尖括号.圆点!感叹号;分号l竖线:冒号/斜杠?问号\反斜杠’单引号~波折号"双引号#井号(左圆括号)右圆括号[左方括号]右方括号{左大括号}右大括号%百分号&and(与)^xor(异或)*乘号...
2018-12-07 21:03:29
530
原创 C语言深度解剖读书笔记2
struct平时我们要求函数的参数尽量不多于四个,如果函数的参数多于四个使用起开非常容易出错(包括每个参数的意义和顺序都容易弄错),效率也会降低(与具体CPU有关)。这个时候,就可以用结构体压缩参数个数。空结构体多大结构体所占的内存大小是其成员内存之和,如果成员内存为0,例如:struct student{}stu;sizeof(stu)的值是多少?在Visual C++上测试结...
2018-12-06 20:50:55
227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人