随笔分类 -  C/C++功能函数

C++的动态联编与静态联编【转载】
摘要:【摘要】:本文阐述了静态联编和动态联编的概念和区别,通过具体实例分析了实现动态联编的条件,指出了虚函数是实现动态联编的基础。【关键词】:静态联编;动态联编;虚函数在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。 1.静态联编 静态联编是指联编工作在编译阶段完成的,这种联编过程是在程序运行之前完成的,又称为早期联编。要实现静态联编,在编译阶段就必须确定程序中的操作调用(如函数调用)与执行该操作代码间的关系,确定这种关系称为束定,在编译时的束定称为静态束定。静态联编对函数的选择是基于指向对象的指针或者引用的类型。. 阅读全文

posted @ 2013-12-31 13:43 google_yep 阅读(319) 评论(0) 推荐(0)

关于虚析构函数
摘要:关于虚析构函数 在C++中,不能声明虚构造函数,但可以声明虚析构函数。多态性是指不同的对象对同一消息有不同的行为特性。虚函数作为运行时多态性的基础,主要是针对对象的,而构造函数是在对象产生之前运行的,因此虚构造函数是没有意义的。析构函数的功能是在该类对象消亡之前进行一些必要的清理工作,析构函数最好都是virtual的。首先解释一下虚构函数和指针之间是如何交互的,以及虚析构函数的具体含义。例如以下代码,其中SomeClass是含有非virtual析构函数的一个类:SomeClass *p= new SomeClass;. . .. . .delect p;为p调用delect时,会自动调用S.. 阅读全文

posted @ 2013-12-31 11:59 google_yep 阅读(267) 评论(0) 推荐(0)

虚析构函数的使用(转载!)
摘要:////////////////////////////////////////////////////////////////////////////////#if CODE1#include//给出一个没有虚拟析构函数的基类classBase{public: Base() { std::cout//给出一个没有虚拟析构函数的基类classBase{public: Base() { std::cout//给出一个有虚拟析构函数的基类classBase{public: Base() { std::cout//给出一个有虚拟析构函数的基类classBase{public: Base() { st 阅读全文

posted @ 2013-12-31 10:19 google_yep 阅读(182) 评论(0) 推荐(0)

c/c++内存机制(转)
摘要:c/c++内存机制(一)(转)一:C语言中的内存机制在C语言中,内存主要分为如下5个存储区:(1)栈(Stack):位于函数内的局部变量(包括函数实参),由编译器负责分配释放,函数结束,栈变量失效。(2)堆(Heap):由程序员用malloc/calloc/realloc分配,free释放。如果程序员忘记free了,则会造成内存泄露,程序结束时该片内存会由OS回收。(3)全局区/静态区(Global Static Area):全局变量和静态变量存放区,程序一经编译好,该区域便存在。并且在C语言中初始化的全局变量和静态变量和未初始化的放在相邻的两个区域(在C++中,由于全局变量和静态变量编译器会 阅读全文

posted @ 2013-12-26 13:40 google_yep 阅读(1200) 评论(0) 推荐(0)

delete this
摘要:In order to understand "delete this" :First Step------dive into "delete p"delete p 执行了哪两个步骤?delete p 是一个两步的过程:调用析构函数,然后释放内存。delete p产生的代码看上去是这样的(假设是Fred*类型的):// 原始码:delete p;if (p != NULL){ p->~Fred(); operator delete(p);}p->~Fred() 语句调用 p 指向的Fred 对象的析构函数。operator delete(p) 阅读全文

posted @ 2013-12-26 13:36 google_yep 阅读(294) 评论(0) 推荐(0)

函数返回 局部变量问题
摘要:#include#includechar*get_str(void){char*str="abcd";returnstr;}intmain(intargc,char*argv[]){char*p=get_str();printf("%s/n",p);return0;}上述代码中,str是局部变量,函数返回后应该释放掉了,但为什么get_str返回后,还能正常输出呢?char *str="abcd"; 这种方式内存分配在静态存储区,str指向"abcd"这一字符串常量,get_str()函数返回指向这一字符串常量的地 阅读全文

posted @ 2013-12-26 10:52 google_yep 阅读(396) 评论(0) 推荐(0)

字符串转换为数字(str2int)
摘要:// 将字符串转换为数字int str2int(char *s){ if (s==NULL) return 0; int temp=0; int vl=0; bool flag=false; while(*s!='\0') { if (*s=='-') { flag=1; s++; } temp = *s-'0'; vl = vl*10+temp; s++; } return flag==true ? -vl:vl;} 阅读全文

posted @ 2013-02-01 14:35 google_yep 阅读(246) 评论(0) 推荐(0)

将数字转换为字符串(int2str)
摘要:// 将数字转换为字符串char* int2str(int n, char* s){char temp[32];int i=0;int j=0;while (n>0){temp[i++] = n%10;n=n/10;}while(i--){s[j++]=temp[i]+'0'; //整数+可转换为字符}s[j]='\0';return s;}//‘0’对于ASCII码表数值 48// 如 char c = 2+'0'; 2+48=50, c 对应ASCII表是 50 阅读全文

posted @ 2013-02-01 14:30 google_yep 阅读(408) 评论(0) 推荐(0)

导航