![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 68
程序员丹尼尔
Coding is not life
展开
-
宏的妙用
作者 阿荣 1、概述 C++中出了const关键字以后,宏定义常量的功能已经不在被推荐使用。这使得宏似乎没有了用武之地。实际上,宏还可以做很多事情,笔者也难以全部列举。这里,仅仅列举几个典型的用法,希望大家能够从中获益。 2、实现多环境兼容 常见的情况是,我们实现了一个函数,希望它只在某种编译条件满足是被编译和使用。例如,我希望在源码中插入调试语句,以便以Debug方式运行时能够通转载 2010-03-06 20:47:00 · 583 阅读 · 0 评论 -
c++ 双向链表代码
<br />#ifndef __LIST_H__<br />#define __LIST_H__<br /> <br />#include "ListIterator.h"<br />namespace xxx<br />{<br /> template <typename T><br /> struct ListNode_t<br /> {<br /> T m_value;<br /> ListNode_t * m_pPrevious;<br /> ListNode_t * m_pNext;<原创 2010-09-19 17:25:00 · 642 阅读 · 0 评论 -
类的static,const,static const , const static成员的初始化
<br /> <br /> 收藏<br /> 学习过C++已经好长时间了,但是一直都没机会去写C++代码,所以很多东西都已经给遗忘了。趁着假期,我重新找到了C++的学习资料来复习,并且写下一些学习的笔记,供自己以后复习之用。下面是我的关于类的static,const,static const , const static成员的初始化问题的学习笔记。<br />1.类里的const成员初始化:<br /> 在一个类里建立一个const时,不能给它初值。像<br />class foo<br />{转载 2010-12-03 09:56:00 · 696 阅读 · 0 评论 -
设置位标记的开关宏
<br />#define_SET_BITFLAG(L, B, yes){if(yes)L|=(B);L&=~(B);}<br /> <br />这个宏用来设置位标记<br />打开标记 L|=(B)<br />关闭标记 L&=~(B)<br /> <br />=================================<br /><br />6. 用法:打开位<br /> <br />打开位是通过 |(位或)打开一个值的特定位,同时保持其他位的不变。这是因为和0位或都为0,和1位或都为1。<b原创 2010-12-16 11:40:00 · 772 阅读 · 0 评论 -
C++ 位运算
<br /><br />C++源自C,在提供高级语言便利的同时,也继承了C在硬件编程方面的功能。因此适用于编写设备驱动和嵌入式大代码。<br /> <br />C++/C 提供位逻辑运算符和移位运算符。二者只能用于整形和字符型。位运算符是对每位进行操作而不影响左右两位,这有别于常规运算符(&& || !)是将整个数进行操作的。<br /> <br /> <br />一. 位逻辑运算符<br />------------------------------------------------------转载 2010-12-16 11:45:00 · 515 阅读 · 0 评论 -
通过#define连接字符串的特殊方法
<br />[转]2009-03-19 17:49转自:<br />http://www.cppblog.com/kerlw/archive/2007/04/20/22381.html<br /><br />最近看com相关的资料,看到CCmdTarget实现com接口的时候,去读了一些宏的定义,在afxdisp.h头文件中<br />#define BEGIN_INTERFACE_PART(localClass, baseClass) /<br />class X##localClass : public转载 2010-10-29 13:41:00 · 4711 阅读 · 0 评论 -
虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)
<br /><br />一. 虚析构函数<br />我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数。因为在delete一个抽象类指针时候,必须要通过虚函数找到真正的析构函数。<br />如:<br />class Base<br />{<br />public:<br /> Base(){}<br /> virtual ~Base(){}<br />};<br />class Derived: public Base<br />{<br />publi原创 2011-01-26 17:31:00 · 666 阅读 · 0 评论 -
类模板的定义和使用
<br /><br /> 如同函数模板一样,使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值能取任意类型。类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。 <br /> 定义类模板的一般形式是:<br /> template <类型名 参数名1,类型名 参数名2,…><br /> class 类名<b转载 2011-02-25 14:39:00 · 1007 阅读 · 0 评论 -
纯虚析构函数的作用
<br /> 在某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有任何纯虚函数。怎么办?因为抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。<br /> 这里是一个例子:<br /> class awov {<br /> public:<br /> virtual ~awov() = 0; // 声明一个纯虚析转载 2011-01-26 17:20:00 · 4052 阅读 · 0 评论 -
C++重载operator的示例[转]
<br />2009-06-15 11:26转自:<br />http://hi.baidu.com/wonder0016/blog/item/2afe34386547b1c4d562258b.html<br />以下示例中定义了一个class test, 重载了<, +, +=, =, ==, <<, >>等符号:<br />#include<iostream><br />#include<vector><br />using namespace std;<br />class test{<br />pu转载 2011-03-03 10:45:00 · 680 阅读 · 0 评论 -
浮点数的相等比较
<br />今天群里边一哥们儿——哦,确切地说,应该是一姊妹——问到了Python中怎样判断一个浮点数的小数部分是不是0,本意是要找和C语言中的fmod函数相同功能的函数的,在Python中在math模块中有这个函数,可是却挑起了一个浮点数精度的话题。<br />突然想到偶们学习C语言的时候老师讲到过,整数的相等比较可以直接使用==来判断,但是浮点数的比较不能简单的用==来比较。那怎么对浮点数是否相等进行判断呢?<br />遂Google了一番,又找到了那个经典的方法:利用差值的绝对值的精度来判断。<br转载 2011-03-15 10:32:00 · 5341 阅读 · 0 评论 -
c++ 双向链表迭代器 代码
<br />#ifndef __LISTITERATOR_H__<br />#define __LISTITERATOR_H__<br /> <br />namespace xxx<br />{<br /> template <typename T><br /> struct ListNode_t;<br /> /** @addtogroup 基础件<br /> * <br /> * @{<br /> */<br /> /** @addtogroup 容器<br /> * <br /> * @{<b原创 2010-09-19 17:33:00 · 1359 阅读 · 0 评论 -
dll导出声明相关
<br /><br />__declspec(dllexport)<br />2008-08-25 15:23<br />一、__declspec(dllexport):<br /> 将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口。<br /> 通常它和extern "C" 合用,形式如下:<br />extern "C"<br />{<br />__declspec(dllexport) RETURN_TYPE FUNCTION转载 2010-08-30 10:22:00 · 2247 阅读 · 0 评论 -
C语言可变参数
<br /><br />C/C++语言有一个不同于其它语言的特性,即其支持可变参数,典型的函数如printf、scanf等可以接受数量不定的参数。如:<br /> <br />printf ( "I love you" ); <br />printf ( "%d", a );<br />printf ( "%d,%d", a, b ); <br /> <br /> 第一、二、三个printf分别接受1、2、3个参数,让我们看看printf函数的原型:<br /> <br />int printf ( co转载 2010-08-23 12:31:00 · 660 阅读 · 0 评论 -
新手入门:关于C++中的内联函数(inline)
出处:PConline 2005年03月01日 作者:管宁 责任编辑:xietaoming文章导读:在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。本文将介绍内联函数的相关知识。 在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。转载 2010-03-06 11:38:00 · 364 阅读 · 0 评论 -
C++中虚析构函数的作用
收藏 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout };class C转载 2010-03-06 12:03:00 · 362 阅读 · 0 评论 -
const_cast的用法
2009-06-30 14:15用法:const_cast (expression) 该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。 常量指针被转化成非常量指针,并且仍然指向原来的对象; 常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。 Voiatil转载 2010-03-08 15:38:00 · 1904 阅读 · 0 评论 -
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)
--------------------------------------------------------------------------------来源:CSDN 作者:新书城收集整理 发布时间:2006-8-2 人气:25609 C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of t转载 2010-04-16 16:50:00 · 474 阅读 · 0 评论 -
(转)typedef的四大用途和两个陷阱
转自:http://blog.sina.com.cn/s/blog_4826f7970100074k.html typedef的四个用途和两个陷阱 --------------------------------- 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变转载 2010-04-23 17:01:00 · 551 阅读 · 0 评论 -
链表的C语言实现
[编辑] C宏实例以下代码摘自Linux内核2.6.21.5源码(部分),展示了链表的另一种实现思路,未采用ANSI C标准,采用GNU C标准,遵从GPL版权许可。struct list_head { struct list_head *next, *prev;}; #define LIST_HEAD_INIT(name) { &(name), &(name) } #defin转载 2010-04-28 10:55:00 · 482 阅读 · 0 评论 -
struct和typedef struct
分三块来讲述:1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu;于是在声明变量的时候就可:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明这里的Stu实际上就是struct Student的别名。另转载 2010-04-28 12:23:00 · 3741 阅读 · 0 评论 -
C函数指针的用法
2008-06-05 12:38------------------------------------------------------------------------------------------------函数指针通常用来实现回调,其基本用法如下:1、定义函数指针类型// 定义一个原型为int Fun( int a );的函数指针typedef int (转载 2010-05-08 09:58:00 · 624 阅读 · 0 评论 -
理解Windows消息机制
1.2 理解Windows消息机制Windows系统是一个消息驱动的OS,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。 1、消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_COM转载 2010-05-08 10:07:00 · 376 阅读 · 0 评论 -
那postmessage 和sendmessage有又什么区别?!
(单弦) PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessa转载 2010-05-08 10:10:00 · 609 阅读 · 0 评论 -
RC4算法示例
<br /><br />//key为密钥~<br /> <br />#include<iostream><br />#include<string><br />using namespace std;<br />int s[256];<br />int t[256];<br /><br />string key="0123456789";<br /><br />void swap(int* s1,int* s2){<br /> int temp=*s1;<br /> *s1=*s2;<br />转载 2011-04-01 07:59:00 · 1347 阅读 · 0 评论