9 justkong

尚未进行身份认证

专注于网络通信,音视频处理

等级
TA的排名 9w+

函数指针和成员函数指针

1、函数指针(1)定义int (*pFunc1)(int param1,int param2);typedef int (*TFunc)(int param1,int param2);TFunc pFunc2;(2)赋值和调用int Add(int param1,int param2);pFunc1 = Add;pFunc1(1,2);pFunc2 = Add...

2020-03-18 09:42:11

C++类模板

一、定义(1)类模板通常应用于数据结构方面,使得类的实现不在关注数据元素的具体类型,而只关注需要实现的功能比如: 数组类,链表类,Queue类,Stack类等(2)类模板和函数模板一样,定义和实现必须都在头文件中(3)类模板中的成员函数可以在类外进行实现,但是必须加上template<typename T>的声明,以及模板类型的声明template<typen...

2020-03-13 15:39:59

C++函数模板

一、定义(1)通过template关键字来声明使用模板(2)通过typename或者class关键字来定义模板类型template<typename T1, typename T2>void Func(T1 objT1, T2 objT2){//函数内部逻辑省略}二、调用(1)自动调用int a = 0;int b = 10;Func(a...

2020-03-13 14:58:43

define中#、##、#@分别表示什么

1. #字符串化,例如:#define LogMessage(a) printf("The message is: %s", #a); LogMessage(WARNING) //The message is:WARNINGstring ppp="abcdef";LogMessage(ppp) //The message is: ppp; not "abc...

2020-03-12 16:52:35

大小端模式和结构体中成员变量的内存分布

一.大端模式和小端模式计算机系统中,每个地址单元对应一个字节(8bit),一种数据类型可能占用多个字节,如何安排这种数据类型中的每个字节,哪个字节在低地址,哪个在高地址,以及每个字节中比特序在内存中的位置,这就涉及到大小端模式。一般情况下,字节序和比特序的排列规则是一致的。我们在书写和计算中数据数据分为高位和低位,高位在左边,低位在右边,例如0x6401中,0x64为高位,0x01为低位。...

2020-03-10 13:58:33

C++11--匿名函数(Lambda函数)

一、定义lambda是一种匿名函数,即没有函数名的函数。lambda函数的语法定义为:[捕捉列表] (参数) mutable -> 返回值类型 {函数体}二、[捕捉列表],定义能够捕获的函数外的变量,通俗地说捕获就是匿名函数外所在作用域内的变量,这些变量可以在函数体内部调用。捕获有两种形式,按值捕获和按引用捕获。按值捕获的变量相当于和函数外作用域内同名的一个变量,在函数内对改变量...

2019-10-11 11:03:38

C++内联函数

一、如何定义非类成员函数,在函数定义处(不是声明处)增加inline关键字。类成员函数,在类体内部(类定义头文件中)定义的函数默认就是内联函数。二、内联函数的优缺点常规函数调用时,程序需要由主程序根据函数地址跳转到函数执行处,函数执行完后再跳转回主程序,函数来回跳转需要一定的开销。而内联函数在编译过程中将函数代码和主程序代码“内联”起来,对于内联代码,程序在执行时无需跳转,运行速度...

2019-10-11 09:50:07

设计模式-模板方法模式Template Method(对象行为型)

一、概述定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。AbstractClass叫做抽象模板,它的方法分为两类:(1)原始方法,是由子类实现的方法,并且在模板方法被调用(2)模板方法,可以有一个或几个,实现对原始方法的调度,完成固定的逻辑class AbstractClass{public: ...

2019-08-30 15:02:13

设计模式-状态模式State(对象行为型)

一、概述当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。State为抽象状态角色,负责对象状态定义,并且封装环境角色以实现状态切换ConcreteState为具体状态角色,负责本状态的行为管理以及趋向状态处理,通俗地说,就是本状态下要做的事情,以及本状态如何过渡到其他状态。Context为环境角色,定义客户端需要的接口,并且负责具体状态的切换。//te...

2019-08-30 14:32:37

设计模式-策略模式Strategy(对象行为型)

一、概述策略模式就是定义一组算法,将每个算法封装起来,并且使它们之间可以互换。(1)Strategy抽象策略角色每个策略或者算法必须具有的方法和属性(2)ConcreteStrategy具体策略角色实现策略中的操作,该类含有具体的算法(3)Context封装角色,上下文角色启封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化class Strat...

2019-08-24 09:25:15

设计模式-备忘录模式Memento(对象行为型)

一、概述在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。二、类图Originator:发起人,负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。Memento:备忘录,负责存储Or...

2019-08-23 15:11:09

设计模式-中介者模式Mediator(对象行为型)

一、概述中介者模式用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其松耦合,而且可以独立地改变它们之间的交互。二、类图Colleague是抽象同事类。而ConcreteColleague是具体同事类,每个具体同事类只知道自己的行为,而不了解其他同事的情况,但它们却都认识中介者对象,通过中介者角色来和其他同事角色进行通信协作。Mediator是抽...

2019-08-23 14:19:45

设计模式-迭代器模式Interator(对象行为型)

一、概述迭代器模式提供一种方法顺序访问一个集合Aggregate(容器)对象中的各个元素,而又不暴露该对象的内部表示(细节)。迭代器是为容器服务的,而能容纳对象的所有类型都可以称之为容器。二、类图1、Iterator抽象迭代器,定义访问和遍历元素的接口,而且基本上有固定的几个方法:(1)first获取第一个元素(2)next访问下一个元素(3)isDone是否已经访问到...

2019-08-22 20:11:05

设计模式-解释器模式Interpreter(对象行为型)

一、概述解释器模式是一种按照规定语法进行解析的方案。给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。二、类图AbstractExpression为抽象解释器TerminalExpression为终结符表达式。实现与文法中的元素相关联的操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。Nontermi...

2019-08-22 19:54:37

设计模式-职责链模式Chain Of Responsibility(对象行为型)

一、概述职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。二、类图Handler一方面需要定义处理请求的方法,另一方面需要定义责任链的下一个继任者(successor)。ConcreteHandler类是具体处理者类,处理它所负责的请求,可访问它的后继者,如果可以处理该请求,...

2019-08-22 18:19:52

设计模式--享元模式Flyweight(对象结构型)

一、概述享元模式(Flyweight),就是利用共享技术有效地支持大量细粒度的对象。当程序创建大量的对象时有损程序的性能,同时还容易造成内存溢出。我们将对象内部的信息进行细粒度地划分,将一部分信息提取出来进行共享,可以节省内存空间,提高程序性能。对象细粒度化后的信息分为两个部分:内部状态(intrinsic)与外部状态(extrinsic)。内部状态是对象可以共享出来的信息,存储在享元对象...

2019-08-22 14:56:38

装饰模式和代理模式对比

一、装饰模式用户使用代码://基类class Subject{public: virtual void operation();};//具体类class ConcreteSubject : public Subject{public: virtual void operation();};//装饰类class Decorate : publi...

2019-08-14 19:26:50

linux中fd_set的内部实现

一、在网络编程中,经常用到selec系统调用来判断套接字上是否存在数据可读,或者能否向一个套接字写入数据。其原型为:  int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);其中,fd_set是一个socket集合,常用如下宏来对fd_set进行...

2019-08-13 17:12:32

原子操作

1、原子操作原子操作(atomicoperation)指的是由多步操作组成的一个操作。如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集。现代操作系统中,一般都提供了原子操作来实现一些同步操作,所谓原子操作,也就是一个独立而不可分割的操作。在单核环境中,一般的意义下原子操作中线程不会被切换,线程切换要么在原子操作之前,要么在原子操作完成之后。...

2019-08-12 10:13:28

条件变量和信号量

1、条件变量条件变量(condition variable)是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待某个条件为真,而将自己挂起;另一个线程使的条件成立,并通知等待的线程继续。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。2、windows条件变量的实现(1)利用同步对象实现条件变量自己封装的一个条件变量: 1 #ifndef _M...

2019-08-08 14:57:30

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。