随笔分类 -  C++

参数 - 学习笔记
摘要:1)默认参数非静态变量不能做默认参数,如下例:[cpp]view plaincopyclassA{public:voidfun(intx=a);//OK//voidfun2(intx=b);//非静态变量不能做默认参数staticinta;intb;};静态数据类型是指非不确定变量类型,包括:const 、#define、全局类static、常量。默认实参是在编译时期指定,非static成员在此时还没被初始化,所以不能,而静态成员是在编译时就能确定值了。非静态数据类型在类构造前没有完成数据的绑定。只有用静态数据类型,这样在对象构造前就可以使用了。因为静态数据类型在类定义的时候就需要初始化了。 阅读全文

posted @ 2012-07-22 18:31 在旅途 阅读(143) 评论(0) 推荐(0)

类的sizeof - 学习笔记
摘要:sizeof是一个操作符,计算的是变量的大小。空类:先了解一个概念:类的实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化(别拿豆包不当干粮,空类也是类啊),所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。非空类:C++中的class就是从C中的struct演变过来的,同时,为了与C的兼容保持了struct,对struct使用sizeof得到的是struct所占的空间,同样使用与class。sizeof只是对堆栈区的内存进行运算,不对静态全局区的内存大小运算。static变量是属于 阅读全文

posted @ 2012-07-22 18:28 在旅途 阅读(170) 评论(0) 推荐(0)

C++中的临时变量[转]
摘要:转自:http://tech.ddvip.com/2009-09/1253979842134546_2.html来源:C++博客作者:樊文鑫 它们是被神所遗弃的孩子,没有人见过它们,更没有人知道它们的名字.它们命中注定徘徊于命运边缘高耸的悬崖和幽深的深渊之间, 用自己短暂的生命抚平了生与死之间的缝隙.譬如朝露,却与阳光无缘.是该为它们立一座丰碑的时候了,墓铭志上写着:我来了,我走了,我快乐过. 许多人对临时变量的理解仅仅限于: string temp; 其实,从C++的观点来看,这根本就不是临时变量,而是局部变量. C++的临时变量是编译器在需要的时候自动生成的临时性变量,它们并不... 阅读全文

posted @ 2012-07-22 18:21 在旅途 阅读(3063) 评论(0) 推荐(1)

C++函数返回引用
摘要:C里没有引用,要把后缀改成cpp之后gcc才能识别为c++程序,关于gcc和g++的区别在另一篇,eclipse要重启重编译(不知怎么,eclipse不重启的话就总还是报错),编译通过了。"引用传递"的性质象"指针传递",而书写方式象"值传递",即使用时跟普通变量一样,看不出是使用了普通变量还是引用。引用是变量的别名。声明时必须初始化,并且从一而终。而函数返回引用,要求在传参里必须有引用或者指针类型作为被返回的值。以下写法一和三都是函数返回引用,写法二只是返回引用类型的参数。写法一,函数返回值和传参都用引用:[cpp]view pla 阅读全文

posted @ 2012-07-22 18:17 在旅途 阅读(2453) 评论(0) 推荐(0)

Union的迷思(转)
摘要:Union的迷思(转自:http://blog.21ic.com/user1/2216/archives/2006/28718.html)联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!1、什么是联合? “联合”是一种特殊的类,也是一种构造类型的数据结构。 在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已达到节省空间的目. 阅读全文

posted @ 2012-05-21 00:36 在旅途 阅读(161) 评论(0) 推荐(0)

C++中Union的介绍
摘要:C++中Union的介绍Union是很有意思的类,里面的全部数据共用一段内存,Union的大小就是最大的数据成员的大小。默认访问权限是公有的。#include <iostream>#include <stdio.h>using namespace std;union{ unsigned int a; char b[5];}c,d;void main(void){ int i = 0; c.a = 0x31313131; char * e = &c.b[2]; for(i = 0; i <=4; i++) { printf(" c.b[%d... 阅读全文

posted @ 2012-05-20 21:43 在旅途 阅读(320) 评论(0) 推荐(0)

导航