C/C++ 编程
文章平均质量分 53
cg05568256068
没有天赋,只有热情和汗水。
展开
-
构造函数在类的继承中
class CCompute{protected:int i;int j;public: CCompute(int a,int b) { i=a;j=b; } ~CCompute(){}};class CCompute2:public CCompute{public: CCompute2(int a,int b) {原创 2009-02-15 16:59:00 · 445 阅读 · 0 评论 -
内存地址对齐 & sizeof
内存地址的对齐主要考虑三个因素: 1:对于每个成员的起始地址是他本身所占的整数倍 2:整个所占的内存是成员中占的地址内存最多的整数倍 3:有#pragma pack(int)进行设置,如果结构体某成员的sizeof大于你设置的,则按你的设置来对齐注意:每次用#pragma pack(int)进行设置后,要用#pragma pack()对其结束,免得造成原创 2009-04-17 10:36:00 · 904 阅读 · 0 评论 -
数组和指针在编译的时候的区别
c语言中指针和数组在编译时的区别 例如:int a[10]和int *b,a[5]和*(b+5) 在编译的时候区别是什么? 经过反复的查资料和请教他人,最后在《c专家编程》里找到了很好的答案。 1。编译器对数组名和指针变量的处理方式 编译器在编译时会产生一个符号表,记录了符号名和它的地址。对于指针变量,这显然很好理解。而数组名就不那么明显了,它仅仅是一个符号而已,何来地址?编译器原创 2009-04-23 11:00:00 · 561 阅读 · 0 评论 -
priority_queue & 结构体
template class Sequence=vector , class Compare=less > 两种方法对结构体优先队列指定自己的优先级方法一:#include#include#includeusing namespace std;struct node原创 2009-05-03 11:08:00 · 2452 阅读 · 1 评论 -
虚函数表 & 指针
今天看了hairetz转载的一篇关于虚函数表的文章,的确很好 http://blog.csdn.net/hairetz/archive/2009/04/29/4137000.aspx 然后对其中的一些问题又重新复习了下,通过下面的代码来解释#includeusing namespace std;class Base{public: vi原创 2009-04-30 13:37:00 · 422 阅读 · 0 评论 -
回调函数
回调函数:如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回调函数(Callback Function)。回调机制包括两部分:服务执行者和服务方式制定者。 1. 服务执行者先制定服务规范; 2.服务方式制定者然后按照规范制定服务方式; 3.然后执行者按照这个方式提供服务。回调函数的原创 2009-09-13 15:56:00 · 581 阅读 · 0 评论 -
error C2011: ' ':'class' type redefinition(头文件重复定义)
最近自己在写代码的时候,也遇到这个问题,最后通过这个文章解决了,感谢!class type redefinition 解决方案这个错误提示是说类重复定义了,下面举例说明一下怎么解决.先建立一个Win32应用程序的空工程,再 建立所下面需要的文件://ds.hclass ds{public: int m_ds; void ds原创 2009-09-29 13:20:00 · 10469 阅读 · 1 评论 -
我对一段程序的理解,望大家指教 (对象返回值)
#include #include //using namespace std;class Point{public: Point() { m_x = 0; m_y = 0; cout<<"construct: x = "<<m_x<<" y = "<<m_y<<endl; } Point(unsigned int x, unsigne原创 2009-09-28 10:40:00 · 466 阅读 · 1 评论 -
delete的误解
以前在学习的时候,知道delete释放指针所指向的内存,总以为在释放指针后,该指针的值会发生改变今天在学校到类的拷贝构造函数的时候,单步调试发现delete释放内存,但指针所指向的地址值不发生改变假设有个指针变量a,delete之前它指向地址0x123456delete之后a所指向的仍然是0x123456,但是0x123456该内存的已经不属于该进程,内容可能被其他进程改变,也可能还没有被其他进原创 2009-11-23 18:01:00 · 544 阅读 · 0 评论 -
static函数(非成员函数)与普通函数的区别
用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。 普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。例如: /*********************************************** * fun.c **************************************原创 2010-04-22 14:30:00 · 1159 阅读 · 0 评论 -
The " count " function in map (STL)
Here is my code when I am learning the function of count in map . #include #include using namespace std;typedef pair pa;typedef map ma;typedef pair paa;typedef map maa;int main原创 2009-04-09 16:51:00 · 596 阅读 · 0 评论 -
用位运算将一个字符的二进制倒置 (c代码)
#includeusing namespace std;//读取该字符的8位二进制void fun(unsigned char x){ for(int i=0;i<8;i++) { cout<<x%2;x/=2; } cout<<endl;}int main(){ unsigned char ch=a; c原创 2009-03-13 21:08:00 · 1901 阅读 · 0 评论 -
i++ i=i+1 i+=1 的比较
i++ 1:首先访问i的内存地址2:i的值自增1 i=i+1 1:访问右边i的地址,取出内容2:取出的内容和1进行加法3:读取左边变量的地址4:将加法运算结果存到左边i的地址中 i+=1 1:访问右边i的地址,取出内容2:取出的内容和1进行加法3:将加法运算结果存到左边i的地址中 所以三个的执行效率依次降低原创 2009-03-12 21:42:00 · 1619 阅读 · 2 评论 -
奇怪的析构函数,不知道为什么这个运行结果
#includeclass ExceptionClass{ char *name;public: ExceptionClass(char *name="default name") { cout<<"Construct "<<name<<endl; this->name=name; } ~ExceptionClass() { cout原创 2009-02-15 21:21:00 · 597 阅读 · 0 评论 -
虚函数学习总结
虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。(引用)一旦类的一个函数声明为虚函数,那么派生类的对应函数也成为虚函数。 下面通过程序解释虚函数: #includeusing namespace std;class Parent{public: char原创 2009-02-19 12:41:00 · 551 阅读 · 0 评论 -
对数组名取地址(深信服笔试题)
#include using namespace std;int main(){int num[5]={1,2,3,4,5};cout<<*((int *)(&num+1)-2)<<endl;return 0;} &num的类型是int[5] 所以&num+1指向的是num数组的最后一个元素的后面,再-2相当于指向数组的倒数第二个数,所以最后的结果就是4原创 2009-02-18 22:45:00 · 683 阅读 · 0 评论 -
STL: LIST中sort和merge的应用(结构体)
#include #includeusing namespace std;typedef struct subscribeitem{ char *cig_code; char *cig_name; //以此作为排序 int cig_quantity; public: bool operator > (const subscribeitem&原创 2009-02-22 11:08:00 · 2662 阅读 · 1 评论 -
关于 const char* p , char const* p 以及 char * const p
const char *p和char const *p的const修饰的都是*p,所以p指针所指向的内容不会发生改变。char * const p的const修饰的是p变量,所以p所指向不能发生改变,p记录的地址不变,但该地址上存放的内容是可以发生修改的,具体参见下面程序: #includeusing namespace std;void main(){ char原创 2009-02-25 21:25:00 · 753 阅读 · 0 评论 -
用递归算法将一个整数存放到一个数组中
用递归算法将一个整数存放到一个数组中#include#includeusing namespace std;vector v;void convert(int num){ if(num<=0) return; convert(num/10); v.push_back(num%10); }int main(){ int m,i;原创 2009-02-22 22:03:00 · 1705 阅读 · 0 评论 -
堆和栈的区别(转贴)
评:介绍的很详细一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—> 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—> 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(s转载 2009-03-06 14:40:00 · 542 阅读 · 1 评论 -
指针和引用的区别
1: 指针它是存放变量地址的变量,引用是变量的别名2:引用在定义的时候必须初始化,之后就不可变;指针则可以变,当然没有初始化的指针是不安全的.在任何情况下都不能指向空值的引用,一个引用必须总指向某些对象。Eg:string& rs; // 错误,引用必须被初始化 string s("xyzzy"); string& rs = s; // 正确,rs指向s 指针没有这样的原创 2009-03-07 14:54:00 · 452 阅读 · 0 评论 -
变量的声明和定义
变量的声明有两种情况:一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。另一种是不需要建立存储空间的 例如:extern int a 其中 变量a是在别的文件中定义的.前者是”定义性声明 (defining declaration)”或者称为”定义(definition)”,而后者是”引用性声明 (referncing declaration)” 从广义的角度来转载 2009-03-12 19:50:00 · 880 阅读 · 1 评论 -
volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。int _tmain(int argc, _TCHAR* argv[]){volatile int i=10;//int i = 1原创 2010-04-22 15:00:00 · 530 阅读 · 0 评论