C/C++
ojshilu
https://github.com/lucky521
展开
-
三种类的访问权限与继承方式 public protected private derive
首先对于非派生的情况: 类 访问 自身的公有成员、保护成员、私有成员,都是OK的。 类对象 访问 自身的公有成员是OK的。 类对象 访问 自身的保护成员是error的。 类对象 访问 自身的私有成员是error的。然后对于派生的情况:一、公有继承方式(最常用):public基类成员保持自己p原创 2013-10-21 10:43:04 · 1287 阅读 · 0 评论 -
C++的虚函数 Virtual Function
virtual有两个用处。 一个是最常见的: virtual关键字修饰类的成员函数。另一个是虚基类机制,用于多重继承。在定义派生类时,要在基类描述前加关键字virtual。避免内存中父虚基类成员的重复放置。虚函数:定义:虚函数必须是类的 非静态成员函数 且 非构造函数,其访问权限是public(可以定义为private or proteceted,但是对于多原创 2014-04-29 16:26:56 · 1143 阅读 · 0 评论 -
位运算使用技巧
一般来讲,位运算的速度比加减乘除运算符、分支语句等的速度要快,并且能够达到并行计算。学几个位运算的技巧,在不滥用的前提下对于优化程序速度是好处的。乘以或除以2的幂数可以用左移>位运算来代替i > 2判断一个数的奇偶性可以用判断二进制最右的一位来代替,最右位是1则是偶数,是0则是奇数。i & 1判断一个数是否是2的幂数x & (x – 1)原创 2013-12-06 15:18:26 · 1441 阅读 · 0 评论 -
截取浮点数的小数位数
对于一个double a = 1.234567;如果我只取小数点后3位,那么我可以这样做:a = floor(a*1000)/1000;floor函数的作用是返回一个小于传入参数的最大整数,所以对于正数来说,就是抹去小数点后的部分。它具有多种形式:double floor ( double x ); float floor ( float x );原创 2014-03-20 17:26:17 · 12645 阅读 · 0 评论 -
字符串分割函数strtok的实现
strtok的函数原型:#include char *strtok(char *str, const char *delim);用法:当str不为NULL时,函数依据delim字符串中的字符作为分隔符,将其str字符串切分,并返回第一个子字符串。然后,当每次以NULL调用strtok函数时,会返回下一个子字符串。一直到strtok返回NULL为止。实现思路:借助原创 2014-04-17 21:33:35 · 2935 阅读 · 0 评论 -
标准模板库的空间配置器 STL's allocator
标准模板库中利用空间配置器来在幕后管理内存空间,有下面两种空间配置器。一种是标准的空间配置器std:allocator一种是高级的空间配置器std:alloc原创 2014-05-04 22:38:26 · 1047 阅读 · 0 评论 -
命令行参数和变长参数表
命令行参数作为程序的输入数据,原创 2014-04-25 20:36:47 · 1042 阅读 · 0 评论 -
KMP算法实现strstr()函数
strStr()函数是C语言库中的字符串匹配函数,函数搜索一个字符串在另一个字符串中的第一次出现。原创 2014-05-30 10:24:51 · 3168 阅读 · 0 评论 -
Win32-API函数调用的约定
函数调用原理:win32 api的函数调用方式是stdcall,其过程操作如下:调用函数的代码:1.调用函数的逻辑代码2.函数调用代码 a.将参数存入栈 (从右向左入栈) b.跳转 call 入口地址 push eip (压入返回地址,即函数调用返回后要执行的下一条指令的地址) mv eip 函数的地址 (将eip设置为被调用函数的原创 2013-11-29 11:58:07 · 1874 阅读 · 0 评论 -
实现指针引用计数的类 Reference Counter
使用一个指针指向一个动态对象,当不再使用的时候要销毁这个对象。如果会有多个指针指向同一个动态对象,那么需要知道,什么时候才能销毁这个对象。提前销毁对象可能导致指针指向并且销毁一个不存在的对象,不销毁则会是内存泄露。因此,有必要为指针设计一个引用计数机制,这个机制封装在一个类中。其实这就是一种智能指针。http://blog.csdn.net/ojshilu/article/details/19原创 2014-02-26 18:58:39 · 1716 阅读 · 0 评论 -
Linux输入输出的I/O缓冲
以前写C程序输入输出并没有特意关注过I/O缓冲区的问题。最近在学习fork的时候,发现I/O缓冲区是需要关注的一个细节问题。I/O缓冲区是Unix支持的一项标准,并且得到ISO C标准的支持。其作用: 标准I/O库提供缓冲的目的是尽可能减少外部设备数据读写read和write的次数,从而加快CPU的工作效率。缓冲区的大小: 缓冲区的大小等于外部块设备的一个块长大小时效率原创 2013-10-27 13:31:02 · 2027 阅读 · 0 评论 -
函数指针的概念和用法
本文来全面的学习一下函数指针。在概念上,函数指针不难理解,和指向变量的指针一样,指向着一个地址,这个地址是一个函数的入口地址(本质上函数名就是函数的入口地址)。在形式上,由于函数原型比变量的形式要复杂,所以函数指针的使用形式要复杂一些。不要因为指针前面加的是函数二字觉得神秘,把“函数”看作是“函数变量”即可。指针函数的什么?: 先来说下另一个概念,叫指针函数,个人感觉这个叫法其实是有原创 2013-10-25 08:58:29 · 2428 阅读 · 0 评论 -
我的Effective C++ 读书笔记 (2013年11月27更新)
关于构造/拷贝构造;/析构/赋值函数——什么情况下必须自己定义拷贝构造函数和重载赋值运算符?若对象成员中有指针变量(其会指向动态分配的内存),则要自己声明拷贝构造函数和赋值运算符。即使确定自己未来不会用到这两个函数,也最好声明出private的函数,空的。以防不小心被误用却还不报错。——什么情况下使用构造函数的初始化列表?应该尽量使用构造函数的初始化列表进行成员的初原创 2013-11-19 15:54:58 · 1020 阅读 · 0 评论 -
内存动态分配函数malloc的基本实现原理
malloc是C语言最常用的标准库函数之一,用于在程序运行中动态地申请内存空间。我们都会使用它,其函数原型为:extern void *malloc(unsigned int num_bytes);那么它是怎么实现的呢?如果让我们自己实现malloc功能的函数,该怎么写? 首先,我们需要知道,操作系统是怎么把一段内存分配给进程的?这当然需要系统调用了。用户态申请分配内原创 2013-11-28 16:01:53 · 9553 阅读 · 0 评论 -
一段输出自身代码的好玩程序
下面是一段有趣的C语言代码,它可以输出它本身:#includemain(char *a){printf(a,34,a="main(char *a){printf(a,34,a=%c%s%c,34);}",34);}是不是很有趣?这里只是用了printf的一个特点。它的使用原型是这样的:int printf ( const char * format, ... );其中第一个参原创 2013-12-06 10:27:24 · 3215 阅读 · 0 评论 -
C++对dll链接库的显示(动态)调用和隐式(静态)调用
C++调用dll链接库的方式有两种:动态调用(又叫显示调用)、静态调用(又叫隐式调用)。一、静态调用dll 静态调用,又称隐式调用。由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码,Windows操作系统会负责控制DLL导入内存的次数。这种调用方式简单,能够满足通常的要求。通常采用的方法是把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的原创 2013-10-22 23:06:16 · 18710 阅读 · 1 评论 -
C和C++语言的强制类型转换 Type Cast
看过好多次C和C++的类型转换的介绍,但总是记不住,再次提起时又会想不起来。主要是因为不常用到的缘故吧。特意写成一篇博客来,总结一下。与强制类型转换相对应的是自动类型转换。或者强制类型转换叫显示类型转换,自动类型转换叫隐式类型转换。 自动类型转换会在赋值运算、混合运算、参数传递、返回函数返回值、格式化输出时且当类型出现不一致时发生,转换按数据长度增加的方向进行。 如果不希望原创 2013-12-04 16:40:43 · 3636 阅读 · 0 评论 -
智能指针的实现
智能指针的作用是让使用者更方便的使用指针,降低出错的可能性。原创 2014-02-18 19:43:31 · 948 阅读 · 0 评论 -
实现深拷贝的类 Deep Copy
如果一个类中有指针对象,那么在拷贝这个类的对象的时候,默认的拷贝方式是只拷贝指针本身,而不重新构建并拷贝指针所指内容。这就叫做浅拷贝Shallow Copy。如果拷贝的方式是不仅仅拷贝指针,而且把指针所指的内容也新建一份,那就叫深拷贝Deep Copy。注意两点:C++在构建默认的拷贝构造函数和赋值运算符重载的时候,对指针的拷贝都是浅拷贝;但是对数组的拷贝是深拷贝!所以,类中有数组成员和指针成原创 2014-02-26 18:41:42 · 2490 阅读 · 0 评论 -
Objective-C和C++的不同之处
Objective-C和C++不同之处:OC不允许多继承。在Objective-C里面没有public和private的概念,你可以认为全是public。在Objective-C里,一切东西都是指针形式保存。同一个数组可以保存不同的对象。nil相当于c语言的NULL。Objective-C will happily let you send a message to nil,原创 2014-03-04 22:35:59 · 963 阅读 · 0 评论 -
printf趣味程序
下面这个单行程序里包含了不少知识:main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}1:unix默认值main(){ printf(“%d”, unix); }2:数组表示法数组的表示法:str[n] 等价于 (n)[str] ,等价于 str + n,就原创 2014-08-29 13:48:17 · 991 阅读 · 0 评论