-
-
[旧帖]
[讨论]C++备忘录
0.00雪花
-
发表于:
2010-8-24 02:14
1445
-
初学者的一点肤浅认识
C是面向过程的,而C++是面向对象的。
比如完成喝水的的任务(忽略水温):
C:
找个杯子
灌满水
倒进嘴巴里(重点是过程)
---------------------------------
C++:
建立一个叫做水的类
声明一个类型为水的对象(并且初始化单位为一杯)
利用水类型的一个(成员)函数把这杯水倒进一个叫嘴巴的对象里(重点是对象)
---------------------------------
1.引用与指针
如果不用在内存地址里跑来跑去的话,还是引用要来得方便一些,也更安全。但如果一定要使用指针的话,用完一定要找到对应的new并delete之,否则很可能几个循环下来内存里就惨不忍睹了。
指针最令人头疼的是对它的描述:
#
int *pr;
整型指针pr自己有一个内存地址:&pr
然后它还有一个值:pr,指向了另一个内存地址(邪恶的 int **ppr; )
最后它还有一个指向的值: *pr ,这个值是一个整型的数据
#
就像mov eax [esi+4]与lea eax [esi+4],虽然能明白它们干了些什么,但每次看到这两个语句时,我都得花上好长时间告诉自己:
mov是把esi+4所在地址的值传给eax,也就是把esi+4看成指针,然后eax = *(esi+4);而lea是把esi+4的值传给eax,也就是eax = esi + 4,即eax变成了指针。
2.const
const除了可以对变量或对象加保护以外,还可以声明常量(只读变量)。
#
int noConst;
const int *pr;
pr = &noConst;
#
pr很快乐地指向了noConst,并且无法通过pr来修改noConst变量所在的内存值,但程序仍然可以用类似noConst++之类的办法修改noConst的值,所以要不要把noConst也设置为const就需要好好考虑一下了。
在成员函数的后面加const是将this指针设置为const。
3.C的简洁
对于一个函数int fun(int a, int b)来说,调用时的fun(x,y)可以理解成下面的几行代码:
#
int a, b; //定义变量在函数的定义里完成
a = x;
b = y; //变量的初始化在调用时完成
#
而在for和while的条件语句里往往隐藏着变量的初始化。刚开始就是因为这个原因而导致好多例句看不明白。还有万恶的+=、-=之流,熟练之后很方便,但刚开始总有一个翻译成i=i+1的过程。
4.关于书写
鉴于int* pr1, pr2; //pr2为int型变量
定义指针时还是用int *pr;比较好。
而const int *a与int const *a是一样的,这个时候就需要找一个自己喜欢的并一直使用,不要一会用前者,过一阵子又用后者,良好的代码书写习惯可以使自己在一周以后再读代码时不至于那么陌生。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!