1.面向对象编程的核心思想是数据抽象、继承和动态绑定。
派生类
2.C++中,基类将类型相关的函数(即派生类可能需要改变的函数)与派生类不做改变直接继承的函数区分对待。对于基类希望它的派生类各自定义适合自身版本的函数,基类需要将这些函数声明为虚函数(virtual function)。
重载运算符的定义方式通常为(以+运算符举例)type operator+(argu1, argu2,..) {}
1.如果一个重载的运算符是成员函数,则它的第一个(左侧)运算对象绑定到隐式的this指针上。成员运算符函数的(显式)参数数量比运算对象的数量少一个。
运算符的调用通常是调用重载的运算符函数,所以可以像调用普通函数一样直接调用运算符函数。eg:
1.一个类通过定义五种特殊的成员函数来控制这些操作,包括:拷贝构造函数(copy constructor)、拷贝赋值运算符(copy-assignment operator)、移动构造函数(move constructor)、移动赋值运算符(move-assignment operator)和析构函数(destructor)。拷贝和移动构造函数定义了当用同类型的另一个对象初始化本对象时做什么。拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么。析构函数定义了当此类型对象销毁时做什么。其中移动操作都是在新标准中引用的。如果我们没有手动定义这些操作,则编译器会为我们自动生成。
内容来源:help regexp
实例场景为在写总结时,经常习惯于一条条的以序号开头列出。例如:
- first
- second test 1.first
- third
由于坏习惯每次打完数字之后总是习惯给个空格,然后markdown渲染时就会出问题,会把这个前面内容序号当时所需渲染的序号,显然此处我们不需要渲染。那么就需要去掉这个多余的空格,假如刚好想到使用正则。正常情况下很简单嘛,使用零宽断言匹配数字之后跟的点号和空白,然后替换为一个点号即可。正则为(?<=^\d+)\.\s+
,但在vim下无法使用,vim下的完整替换命令应该为:%s /\(^\d\+\)\@<=\.\s\+/\./g
。简单解释如下:
vim下面的\+
与我们正常regex中的+
含义一样,\(\)
用于分组,\@<=
表示零宽正回顾后发断言。不像正常见到的那种=
号后面表达想要匹配的表达式,VIM中\@=
中的=号仅仅表示需要匹配前面括号中的内容。例如foo\(bar\)\@=
会匹配foobar中的foo,而foo\(bar\)\@!
中\@!
表示foo后面不匹配bar的位置,即会匹配所有后面不跟bar的foo。\@=
等价于\&
,使用\&
时不需要带括号,如\(foo\)\@=
等价于foo\&
日常不常见,但又经常会用到的一些技巧或方法,不断补充
了解socket编程过程,根据MSDN上的Windows Sockets 2文档实现通过socket来发送和接受文件。MSDN上的具体说明:https://msdn.microsoft.com/en-us/library/windows/desktop/ms740673%28v=vs.85%29.aspx
对于C++实现的服务端和客户端过程大致如下:
服务端:
客户端:
这里只涉及位图图像
首先图像总像素个数=宽 * 高,每个像素的颜色深浅信息是通过图像的位深度来决定的。所以位深度也直接影响着一个图像占用的总字节数,常见的图像多数都是位图。
位深度的解释:在记录数字图像的颜色时,计算机实际上是用每个像素需要的位深度来表示的。黑白二色的图像是数字图像中最简单的一种,它只有黑、白两种颜色,也就是说它的 每个像素只有1位颜色,位深度是1,用2的一次幂来表示;考虑到位深度平均分给R, G, B和Alpha,而只有RGB可以相互组合成颜色。所以4位颜色的图,它的位深度是4,只有2的4次幂种颜色,即16种颜色或16种灰度等级 ) 。8位颜色的图,位深度就是8,用2的8次幂表示,它含有256种颜色 ( 或256种灰度等级 )。24位颜色可称之为真彩色,位深度是24,它能组合成2的24次幂种颜色,即:16777216种颜色 ( 或称千万种颜色 ),超过了人眼能够分辨的颜色数量。当我们用24位来记录颜色时,实际上是以2^(8×3),即红、绿、蓝 ( RGB ) 三基色各以2的8次幂,256种颜色而存在的,三色组合就形成一千六百万种颜色。
一些Awesome网站汇总
如何在C++中使用正则表达式