
C/C++语言
HappyTree
计算机软件行业,爱好乒乓球
展开
-
操作符++(后缀)的重载
下面是一个++操作符重载的例子: class Int...{public: Int(int n = 0) : n_(n) ...{} Int operator ++(int) ...{ Int temp(*this); n_++; return temp; } Int& operator ++() ...{原创 2007-01-03 19:56:00 · 1046 阅读 · 0 评论 -
打印一首唐诗的N种实现之三:宏替换
虽然在C++在一般推荐不要使用宏,但在一些特定的场合,宏还是能发挥很大的作用。下面就是一些宏替换法,思路应该是不言自明的了。1、替换main()函数#define main main() ...{ cout"白日依山尽, ""黄河入海流, ""欲穷千里目, ""更上一层楼. "; return 0;}int no_useint main()...{ cout"白日依原创 2007-01-02 11:28:00 · 1001 阅读 · 0 评论 -
打印一首唐诗的N种实现之五:操作符重载
通过重载原有完整的代码如下:ostream& operator (ostream & out, const char* pc)...{ string s1(pc); string s2("白日依山尽, "); if (s1 != s2) printf("%s", pc); else printf("白日依山尽, 黄原创 2007-01-02 12:53:00 · 1079 阅读 · 0 评论 -
打印一首唐诗的N种实现之六:内存修改
通过调用VirtualProtectEx来修改,通过修改main()函数的入口地址来达到修改打印内容的目的。完整的代码如下:int main(int argc, char* argv[]);int mine()...{ cout "白日依山尽, 黄河入海流, 欲穷千里目, 更上一层楼. "; return 0;}int SetHook()...{ DWORD fla原创 2007-01-02 13:07:00 · 894 阅读 · 0 评论 -
61条面向对象设计的经验原则
61条面向对象设计的经验原则 作者:Arthur J.Riel “你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。” ----------Arthur J.Riel(1)所有数据都应该隐藏在所在的类的内部。(2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。(3)尽量减少类的协议中的消息。(4转载 2007-01-04 12:41:00 · 729 阅读 · 0 评论 -
static用法小结
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, regi转载 2007-01-06 09:28:00 · 852 阅读 · 0 评论 -
嵌入式基本面试题
预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年转载 2007-01-14 09:32:00 · 1605 阅读 · 2 评论 -
C++面试题
1. What is displayed when f() is called given the code:class Number {public: string type; Number(): type(“void”) { } explicit Number(short) : type(“short”) { } Number(int) : type(“int”)原创 2007-01-14 10:39:00 · 1691 阅读 · 1 评论 -
HP-UX11.23上的一个BUG
最近发现HP-UX11.23上的一个BUG,是关于finite(x)宏的。在HP-UX11.23的命令手册中, 相对应的宏是isfinite(x),但调用后编译器提示根本没有这个宏。后来发现,原来需要使用_Isfinite(x)这个更不标准的宏。原创 2007-05-03 07:44:00 · 1098 阅读 · 0 评论 -
使用const使参数可以转换
请看下面的代码#include iostream>#include string>using namespace std;void foo(string& str)...{ cout str endl;}int main()...{ foo("This cant compile successfully!"); return 0;}这将无法编译通过。因为在原创 2007-05-13 11:18:00 · 1496 阅读 · 0 评论 -
如何删除链表节点
题目是这样的:一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?有关链表的面试题在技术面试中是很常见的。因为链表在数据结构中是很基本的结构,另外,链表经常会使没有扎实掌握的人陷入误区。就以这道题为例,没有一定的基础,感觉无从下手。但如果理解了链表在内存中的存储方式,找到解决办法也是不难的。解决方案:将这个指针指向的next节点值copy到本节点原创 2007-05-19 06:57:00 · 12757 阅读 · 5 评论 -
常用库函数的C实现
在论坛中经常看到询问常用库函数的C实现的问题。其实这些实现在VC的安装目录下都能找到。如果安装了VS2005,那么它应该在Microsoft Visual Studio 2005/VC/crt/src下面。这里是一些常见的库函数的实现示例: long __cdecl _atol_(const char *nptr){ int c; long total; int s原创 2007-05-19 07:14:00 · 1551 阅读 · 0 评论 -
OPENSSL 学习整理-介绍
来源: http://www.mscenter.edu.cn/blog/jeffrey/articles/8850.htmlOpenssl目录名以及功能描述 目录名 功能描述转载 2007-05-19 07:52:00 · 1704 阅读 · 0 评论 -
打印一首唐诗的N种实现之一:问题的提出
很久以前在csdn上看到的一个帖子,整理了一下,贴出来,让大家再次感受一些优快云上的CER/CPPER的智慧。坦白地说,看完此贴后,我真的很佩服这些高手。当然,大家UP的气氛也甚高。题目是这样的:有下面的一段代码int main(int argc, char* argv[])...{ cout"白日依山尽, "; return 0;}请在不修改main()函原创 2007-01-02 11:01:00 · 1709 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别 一、预备知识程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据 结构中的栈。 2、堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据 结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(sta转载 2007-01-06 09:00:00 · 964 阅读 · 0 评论 -
区分三种不同的对象构造方式
由一个类构造一个对象有多种构造方式,以下代码展示各种构造方式:class Int...{public: Int() ...{ cout "Default Constructor" endl; } Int(int a) : a_(a) ...{ cout "Direct Constructor" endl; }原创 2007-01-03 20:44:00 · 1016 阅读 · 0 评论 -
C++类库介绍
再次体现了C++保持核心语言的效率同时大力发展应用库的发展趋势!!在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提转载 2007-01-04 12:36:00 · 925 阅读 · 0 评论 -
可变参数学习笔记
前言:本文在很大程度上改编自网友kevintz的“C语言中可变参数的用法”一文,在行文之前先向这位前辈表示真诚的敬意和感谢。一、什么是可变参数我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数转载 2007-01-05 20:19:00 · 799 阅读 · 0 评论 -
内存泄漏检查
版权申明本文可以被自由转载,但是必须遵循如下版权约定:1、保留本约定,并保留在文章的开头部分。2、不能任意修改文章内容,或者删节,增加。如果认为本文内容有不当之处需要修改,请与作者联系。3、不能摘抄本文的内容,必须全文发表或者引用。4、必须保留作者署名、注明文章出处。(本文授权给www.linuxaid.com.cn)5、如不遵守本规定,则无权转载本文。 作者ariesram电子邮件地址arie转载 2007-01-06 09:42:00 · 1058 阅读 · 0 评论 -
打印一首唐诗的N种实现之二:程序退出点修改
这种实现的第一种实现是使用atexit()函数。 该函数是C运行时函数,在main()函数退出之后会执行此函数。因此,我们只要在这里设置一个钩子,让程序退出时执行一段我们的代码,就可以达到此目的。注意,钩子函数不能有任何参数,也不能返回任何值。完整的实现如下:void at_exit_p( void )...{ cout "黄河入海流, " "欲穷千里目, " "更上一层楼原创 2007-01-02 11:13:00 · 1226 阅读 · 0 评论 -
Traits: 类型的else-if-then机制
Traits: 类型的else-if-then机制什麽是traits,为什麽人们把它认为是 C++ Generic Programming 的重要技术?简短截说,traits如此重要,是因为此项技术允许系统在编译时根据类型作一些决断,就好像在运行时根据值来作出决断一样。更进一步,此技术遵循“另增一个间接层”的谚语,解决了不少软件工程问题,traits使您能根据其产生的背景(context)来转载 2007-01-05 19:45:00 · 1198 阅读 · 0 评论 -
C语言面试题大汇总
最近因为找工作,收集了很多C语言方面方面的面试题以及答案。现在新工作搞定了,决定把这些资料发出来,送给有需要的朋友,免得再象我一样到处搜寻,实在辛苦。发布之前先申明两点: 1 所有资料来自网络(主要是优快云),本人只是收集和转发。 2 所有问题解答(尤其是代码)只是参考,不保证正确。先发基本问题,再发编程问题..........想成为嵌入式程序员应知道的0x10个基本问转载 2007-01-06 08:12:00 · 1477 阅读 · 0 评论 -
__cdecl __fastcall与 __stdcall
__cdecl __fastcall与 __stdcall 调用约定: __cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。 1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内转载 2007-01-06 09:02:00 · 795 阅读 · 0 评论 -
C/C++内存区分配
一.在c中分为这几个存储区1.栈 - 有编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的>另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。 - 程序结束释放转载 2007-01-06 09:23:00 · 1110 阅读 · 2 评论 -
打印一首唐诗的N种实现之四:原代码失效
这种方法是通过各种方式来使原有的代码不再起作用。1、添加类作用域int main()...{ cout "白日依山尽, " "黄河入海流, " "欲穷千里目, " "更上一层楼. "; return 0;}class a ...{ int main() ...{ cout"白日依山尽, "; return 0; }};原创 2007-01-02 11:37:00 · 1045 阅读 · 0 评论 -
深入理解++操作符
操作符++作为前缀和后缀的优先级不一样,当它与指针相结合时,理解起来可能就更复杂一些,以下代码列举了其中的各种情形。 int main()...{ char arr1[] = "hello world!", arr2[] = "HELLO WORLD!"; char *p = arr1, *q = arr2; // the priority of ++ is higher原创 2007-01-03 19:39:00 · 861 阅读 · 0 评论 -
C++经典推荐
选择现在来推荐C++图书,看似蹊跷,实则是有原因的。我们的专栏去年初从Java图书开始,一年多的时间里始终对C++触及甚少。C++程序员出身的我,已经受到了不少好友和读者的质疑。去年是C++诞生20周年(从1985年第一个商业实现的发布算起),世界各地包括国内都举行了不少活动,当时本来已经动笔写了一个初稿,也想来个献礼,但是稿成之后,看看又不满意,加之俗务缠身,就放了下来。这一拖,又是小转载 2007-01-05 19:43:00 · 1773 阅读 · 1 评论 -
内存bug的检查列表
前些时候有个同事调试一个有关内存的bug,因此想了一下检查列表,总结如下:1. Build project with /GS (to check the buffer when it is writen immediately)2. Copy the pdb file with the binaries3. Locate the files and lines dumped4. For str原创 2008-04-23 18:38:00 · 1081 阅读 · 0 评论