Fork me on GitHub
摘要: 一种错误的观念: 子类继承父类,只把父类的公有成员继承下来,私有的不会继承。 事实上无论是如何继承,都会把父类的所有成员继承下来。 1 #include<iostream> 2 using namespace std; 3 4 class Base { 5 private: 6 int x; 7 } 阅读全文
posted @ 2018-08-20 17:00 克拉默与矩阵 阅读(483) 评论(0) 推荐(0) 编辑
摘要: C++ new Complex类 String类 C++ delete Comlex类 String类 array new 一定要搭配array delete VC架构下new内存分配演绎 Linux架构下内存分配原理类似,这里以Windows平台VC下内存分配为例。 上下cookie主要用于记录分 阅读全文
posted @ 2018-08-19 22:13 克拉默与矩阵 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 静态成员 由关键字static修饰说明的类成员,称为静态类成员(static class member)。虽然使用static修饰说明,但与函数中的静态变量有明显差异。类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用的内存中。 静态成员又分为静态成员函数,静态成员数据 静态数据 阅读全文
posted @ 2018-08-17 21:01 克拉默与矩阵 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 转自:宏与分号 细节决定成败! 如果留心的话,可以看到 linux内核代码经常有这么奇怪的宏定义: 引用 #define wait_event(wq, condition) do { if (condition) break; __wait_event(wq, condition); } while 阅读全文
posted @ 2018-08-16 22:59 克拉默与矩阵 阅读(621) 评论(0) 推荐(0) 编辑
摘要: 原文:C语言字节对齐问题详解 结构体字节对齐的细节和具体编译器实现相关,但一般而言满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2) 结构体每个成员相对结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal 阅读全文
posted @ 2018-08-16 15:23 克拉默与矩阵 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 定义与声明的关系,其实“强弱符号关系”。 谁是强符号,谁是弱符号 函数定义:强符号 函数声明:弱符号 初始化了的全局变量:强符号,我们常将这种称为定义 未初始化的全局变量:弱符号,我们常将这种称为声明 强弱符号的统一规则 ①不能允许重复出现同名的强符号,但是允许重复出现有同名的弱符号 在a.c中同时 阅读全文
posted @ 2018-08-15 23:11 克拉默与矩阵 阅读(1405) 评论(0) 推荐(0) 编辑
摘要: Linux下c内存映像 大方向分为 应用空间 + 内核空间 他俩内存空间布局差不多。这里重点回顾分析应用空间布局,应用空间分为:代码段 + 数据段(静态数据段+动态数据段) 代码段 为啥是只读的 代码段在编译时就定好了,在程序的运行过程中,不能在代码段去开辟空间,以及释放空间。 包含哪几部分 ELF 阅读全文
posted @ 2018-08-15 22:38 克拉默与矩阵 阅读(440) 评论(0) 推荐(0) 编辑
摘要: 复杂C源码中,往往可以经常看到各种宏的比较深入的用法,所以我们这里举一些宏的比较高级的、比较深入的用法的例子。 使用宏来代替简短函数 参考:C++——引用 例子 #include <stdio.h> void exchange(int *p1, int *p2) { int tmp = 0; tmp 阅读全文
posted @ 2018-08-14 22:53 克拉默与矩阵 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 由于C++兼容C语法,所以C的条件编译,在C++中也适用。 什么是条件编译 从“条件编译”这个名字上就能看出,所谓“条件编译”其实就是“按照条件去编译”。也就是“预编译”时,预编译器处理“条件编译”时,可以通过“条件编译”帮你保留某些代码、以及帮你去掉某些代码,第二阶段编译时就只编译保留的代码。一般 阅读全文
posted @ 2018-08-14 22:53 克拉默与矩阵 阅读(1317) 评论(0) 推荐(1) 编辑
摘要: phony target Makefile的语法很简单 目标、先决条件、命令 构成了Makefile的全部规则 一般而言,说到目标总给人一种非要产生么东西出来的感觉,如果带着这种感觉理解phony target(伪目标)可能有些吃力。更好的一种理解是将phony target理解成一个动作,动作的特 阅读全文
posted @ 2018-08-12 23:43 克拉默与矩阵 阅读(985) 评论(0) 推荐(0) 编辑
摘要: 前言 一个项目,拥有成百上千的源程序文件,编译链接这些源文件都是有规则的。Makefile是整个工程的编译规则集合,只需要一个make命令,就可以实现“自动化编译”。make是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual 阅读全文
posted @ 2018-08-12 23:18 克拉默与矩阵 阅读(573) 评论(0) 推荐(1) 编辑
摘要: 参考:https://www.cnblogs.com/kongzhongqijing/p/5784293.html 阅读全文
posted @ 2018-08-12 22:33 克拉默与矩阵 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 主流发行版 1. Red Hat Linux Red Hat 公司一直是Linux 乃至开源世界的领导者。其有两个不同的发行版本: 一个商用版,称为Red Hat Enterprise Linux,专注于企业应用,并提供全套技术支持; 另一个是免费开源版,称为Fedora ,其开发依托于Linux 阅读全文
posted @ 2018-08-12 20:25 克拉默与矩阵 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 人类社会的friend VS C++世界的friend 现实世界中,我们自己很多物品,朋友是可以使用的,但是陌生人就不行。那么money,朋友可以随便拿吗?这要是你和friend的关系深浅而定。人类社会friend多多少少还是会有些限制。而C++中的friend才是真正的friend,class中的 阅读全文
posted @ 2018-08-08 17:18 克拉默与矩阵 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 参考 C++——overloading principle analysis operator overloading C语言中,对一个东西进行操作一定要涉及到一个函数,对于自定义类型,为了实现其四则运算你必须给出相应函数,而不能简单使用+=*/等operator。C++考虑到书写习惯,允许对ope 阅读全文
posted @ 2018-08-08 17:17 克拉默与矩阵 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 原始代码 1 #include<iostream> 2 using namespace std; 3 class Test { 4 public: 5 //以参数列表形式对数据成员进行初始化 6 Test(int d = 0) :data(d) 7 { 8 cout << "Create Test 阅读全文
posted @ 2018-08-08 14:07 克拉默与矩阵 阅读(486) 评论(0) 推荐(0) 编辑
摘要: Big Three C++ 中Big Three指的是copy ctor 和 copy op= 和 dtor m_data是个字符串指针。一般而言,处理字符串,都是使用指针,在需要存储字符的时候再创建内存,这是因为字符串的长度有大有小,指针的处理方式有种动态的感觉。使用数组的话,则无法准确设置字符串 阅读全文
posted @ 2018-08-06 12:44 克拉默与矩阵 阅读(1204) 评论(0) 推荐(0) 编辑
摘要: 转载请注明出处:https://www.cnblogs.com/kelamoyujuzhen/p/9427555.html pass by value vs. pass by reference (to const) pass by value是整包传递,不管这个包多大。传的动作实际上是压到funt 阅读全文
posted @ 2018-08-05 22:11 克拉默与矩阵 阅读(1176) 评论(0) 推荐(0) 编辑
摘要: What is constructor C++中,如果你想要创建一个object,有一个函数会自动被调用(不需要programmer显式调用 ),这个函数就是constructor; constructor的写法很独特,其function name必须和class name相同; construct 阅读全文
posted @ 2018-08-05 21:30 克拉默与矩阵 阅读(3490) 评论(0) 推荐(0) 编辑
摘要: 原文链接:OpenCV--矩阵的掩膜操作 参考链接:OpenCV探索之路(十三):详解掩膜mask 我的实验代码 法1 #include<opencv2/opencv.hpp> #include<iostream> #include<math.h> using namespace cv; int m 阅读全文
posted @ 2018-08-05 14:54 克拉默与矩阵 阅读(822) 评论(0) 推荐(0) 编辑
摘要: 涉及API imread 原型 CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR ); 功能 加载图像文件成为一个Mat对象。OpenCV支持JPG、PNG、TIFF等常见格式图像文件加载 参数 fil 阅读全文
posted @ 2018-08-04 18:54 克拉默与矩阵 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 开发环境 VS 2017 15.7.6 OpenCV 3.4.1 搭建环境 设置环境变量 创建Win32 空项目 配置属性管理器 测试代码 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; int main(int 阅读全文
posted @ 2018-08-04 17:26 克拉默与矩阵 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 编译4个过程:预处理,编译,汇编,连接。宏就是在预处理阶段发挥作用。 宏结尾没有;,因为凡是;结尾的东西,都是由第二阶段“编译”来处理的(a.i->a.s),而所有预编译的代码都是在预编译阶段处理的,为了以示区分,所以所有预编译的代码都不需要分号结尾。 宏有两种,一种是有宏体宏,另一种是无宏体宏。 阅读全文
posted @ 2018-08-04 09:41 克拉默与矩阵 阅读(611) 评论(0) 推荐(0) 编辑
摘要: 对比参考:剖析.o文件ELF组成 相比.o的ELF格式,有哪些变化? .rel.text和.rel.data消失了 为什么这两个节会消失? 链接器将各.o中同名的.text和.data节整合到一起时,会对整合后的.text和.data进行重定位。其实重定位时主要针对就是.text和.data节,不过 阅读全文
posted @ 2018-08-03 20:17 克拉默与矩阵 阅读(1273) 评论(0) 推荐(0) 编辑
摘要: 参考:剖析.o文件ELF组成 目标文件 .symtab中记录的符号是从.s文件来的,所以.s这个汇编文件很关键。 .symtab所记录符号的种类 示例代码 a.c extern int a_va1 = 100; static float a_va2 = 200.0; static void a_fu 阅读全文
posted @ 2018-08-03 16:43 克拉默与矩阵 阅读(2041) 评论(0) 推荐(0) 编辑
摘要: 目标文件种类 有三种 ①可重定位目标文件 被用于静态链接的文件,都是可重定位目标文件。根据这个概念,静态库文件(.a/.lib)和.o文件都是“可重定位目标文件”,因为它们都是静态链接的。 疑问:为什么称为“可重定位”? 因为静态连接时,逻辑地址需要被重定位为运行地址,所以就被称为可重定位目标文件。 阅读全文
posted @ 2018-08-03 11:47 克拉默与矩阵 阅读(546) 评论(0) 推荐(0) 编辑
摘要: ELF文件结构组成 ①总共13个节 ②每个节都有一个编号。从ELF头开始编号,编号从0开始,编号的作用就是用来索引(找到)不同节的。 ③每个.o的都是这样的结构。链接时要做的就是,将ELF格式的.o全部合成为一个完整的ELF格式可执行文件。 ④.o中每个节的逻辑地址都是从0开始的 ELF头 ELF格 阅读全文
posted @ 2018-08-03 11:46 克拉默与矩阵 阅读(1685) 评论(2) 推荐(1) 编辑
摘要: 如何得到库 ①先写好一堆的.c文件(.c:我们所需要的各种工具函数) ②将这些.c编译为对应的.o ③将所有的这些.o打包为一个仓库文件(静态库或者动态库) 静态库:按照静态库的方式打包 动态库:按照动态库的方式打包 因为打包的规则不同,所以得到库也是不同的 共性与个性 二者的共性 都是事先做好的. 阅读全文
posted @ 2018-08-03 10:19 克拉默与矩阵 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 什么是链接? 链接其实就是连接的意思,将所有相关的东西连接起来。 简单理解静态连接和动态链接: 静态链接:编译时完成链接 动态链接:程序运行起来后,根据需求再去链接,这就是动态链接 静态链接 什么是静态链接 所谓静态链接,其实就是在编译时,调用ld/collect2链接程序,将所有的.o中的机器指令 阅读全文
posted @ 2018-08-03 00:19 克拉默与矩阵 阅读(1046) 评论(0) 推荐(2) 编辑
摘要: 分析gcc -v的详细信息的意义 首先我们需要清楚一点,我们并不能完全弄清楚gcc -v的所有信息,因为毕竟我们并不是GCC编译器集合的实现者,对于这些信息,他们才是最清楚的。由于我们不能将所有的信息都搞清楚,所以我们只分析关键信息。虽然我们不能将所有信息都全部弄清楚,但是分析里面的关键信息还是非常 阅读全文
posted @ 2018-08-03 00:17 克拉默与矩阵 阅读(9699) 评论(0) 推荐(1) 编辑
摘要: 被忽略的过程 对于C这种编译性语言,我们平时编译时,不管是通过IDE图形界面,还是通过命令行,总感觉编译一下就完成了,然后就得到了针对某OS和某CPU的二进制可执行文件(机器指令的文件)。但是实际上在源码到可执行文件中间隐藏了四个过程,这四个过程被OS默默的处理了。 编译四个过程:预处理、编译、汇编 阅读全文
posted @ 2018-07-31 16:11 克拉默与矩阵 阅读(5187) 评论(3) 推荐(7) 编辑
摘要: 系统API里面也会有简单的指令,类似于a++这种,我们认为的简单指令对应到汇编可能很多条。执行在其中某一条汇编的时候可能就切换进程了。切换进程可能发生在用户态(虚拟内存的用户空间),也可能发生在内核态(虚拟内存的内核空间)。不管在哪,切换之前做好记录工作,保护现场,将来切换回来的时候继续执行。这样的 阅读全文
posted @ 2018-07-31 11:33 克拉默与矩阵 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 现代操作系统下的内存 现在的OS都引入了虚拟内存机制。我们说的内存空间,实际上虚拟内存空间,CPU执行PC指向的命令,PC指向的就是虚拟内存空间地址。虚拟内存机制只不过是OS为我们做了一层虚拟内存地址到物理内存地址的映射,我们不需要管具体是怎么映射的,直接用就完了。每个进程的虚拟地址空间都是一样的, 阅读全文
posted @ 2018-07-29 19:17 克拉默与矩阵 阅读(391) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-07-23 19:33 克拉默与矩阵 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 右左法则 首先从最里面的圆括号看起,然后往右看,再往左看,每当遇到圆括号时,就应该调转阅读方向,一旦解析完圆括号里面的所有东西,就跳出圆括号,重复这个过程直到整个声明解析完毕。 举例:int * (* (*fun) (int *)) [10] 首先,fun是一个指针,因为他先跟*(绿色色)结合。fu 阅读全文
posted @ 2018-07-22 21:20 克拉默与矩阵 阅读(433) 评论(0) 推荐(0) 编辑
摘要: 一个存在已久的谣言 源码 运行结果: 根据运行结果,很多人就会得出“数组名就是首元素的地址”这样错误的结论。见代码 运行结果: 如果 “数组名就是首元素的地址” 结论属实,那么数组名的大小就是一个指针的大小。事实上,数组名代表整个数组空间。 数组名(ar)本身的确是个地址,在数值上等于数组首元素取地 阅读全文
posted @ 2018-07-22 20:19 克拉默与矩阵 阅读(3341) 评论(0) 推荐(2) 编辑
摘要: edit类型的子窗口 ES_MULTILINE:多行输入文本框 窗口的消息: WL_COMMAND: EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_COMMAND消息,其通知码是EN_CHANGE。 WM_GETTEXT: 用SendMessage函数 阅读全文
posted @ 2018-07-20 21:41 克拉默与矩阵 阅读(580) 评论(0) 推荐(0) 编辑
摘要: button子类型BS_3STATE、BS_AUTO3STATE、BS_AUTOCHECKBOX 源码 1 #include<Windows.h> 2 #include<Windowsx.h> 3 4 LRESULT CALLBACK WindProc(HWND hwnd, UINT message 阅读全文
posted @ 2018-07-20 19:23 克拉默与矩阵 阅读(732) 评论(0) 推荐(0) 编辑
摘要: 使用默认窗口处理函数,源码 1 #include<Windows.h> 2 #include<Windowsx.h> 3 4 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); 5 LRE 阅读全文
posted @ 2018-07-20 11:29 克拉默与矩阵 阅读(628) 评论(0) 推荐(0) 编辑
摘要: 静态子窗口类型 wndclass:static 源码 1 #include<Windows.h> 2 #include<Windowsx.h> 3 4 HINSTANCE G_h; 5 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM 阅读全文
posted @ 2018-07-19 21:20 克拉默与矩阵 阅读(259) 评论(0) 推荐(0) 编辑