c++学习感想
C++的学习感想 LUPA开源社区@d
@#S`Je f/K1p
原作者姓名 robindy LUPA开源社区%\0F#y(r\
正文LUPA开源社区cu;fuN3{7V
很多人把学习C++语言当成学习VC了,我曾经就走过这样的弯路。当学了很长时间的VC后LUPA开源社区/A6NrLN%s$U)]
EX
还是得回过头来学习C++语言本身。
那么学习C++从何处入手了?
?$sl/yU.B(H0C++语言相对于C语言来说引入了两个大的新东西,一个就是面向对象(具体来将就是类
6^F9Rx^5`2X0),另外就是模板技术(模板编程或者叫泛型编程是进来非常流行的技术,在C#中虽然还
-uyk|'r_1d0没有对泛型编程的支持,但是相信在将来也一定会加入这一功能),模板是C++中比较复
7l
Gk.|p%V0杂的部分,但是作为一个真正的C++程序员,这部分很重要。尤其是对C++标准程序库
#D
oZXq0的掌握尤为重要。
+QfKfMc(}
c,a;[&j0刚开始的时候千万不要直扑VC中的各种向导和设计器。因为依赖开发环境生成的很多代码
#|Qtr-TL
W0会把我们搞糊涂,也不利于我们学习C++语言本身。我的建议就是生成一个空的控制台工
*j;c? E:G0程,然后自己向里面添加文件。
|E1?{j0如下就是一个简单的控制台程序:
MBt!]O-G[o0//robindy/list.cppLUPA开源社区GtI8U%b n\(Z
#include <iostream>
YRi3AS*D0#include <list>LUPA开源社区V:m4|6~dUt{
using namespace std;
(]]!oE1v(e2R }"pp0 LUPA开源社区*xal`-}8M1qI8U'\int main()
oz
I(~;D9zI,T0x0{LUPA开源社区1GX8GND0X:h2c&Xu[
list<char> coll;LUPA开源社区
Qp8E&x/I7@
for(char c = 'a'; c <= 'z'; ++c)LUPA开源社区0r0Md!}m5EE
{
V)aS6E*u:@pM2M0 coll.push_back(c);
U Rr
~0F(sc$n'\0 }
UGV)J}0 list::const_iterator pos;
z:r$n"t@V0 for(pos = coll.begin(); pos != coll.end(); ++pos)LUPA开源社区/gh2zM#],Wv NP
{LUPA开源社区l
k:ELu,d
cout << *pos << ' ';LUPA开源社区*^Y7A C4b/fG
}
K*k#}ET!a5R4m0 cout << endl;LUPA开源社区&|%OCb7B'Am${
Z
I-l$o8I k@0 return 0;LUPA开源社区
{ TItC4Qm9QxS!y
}
L/t5^O#C:]g1jd d0对using namespace std;的解释:LUPA开源社区7e*@
d\"n4k
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
!peQ$S
c
l V$d0由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:LUPA开源社区9C6H
v~0tc
c
1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:LUPA开源社区O7C#JZ'{Q3FK.O4V
std::cout << std::hex << 3.4 << std::endl;LUPA开源社区&hF9`S||"\!h
2、使用using关键字。
JN0ahX0c+E0using std::cout;LUPA开源社区
v$\:dvnc
using std::endl;LUPA开源社区y-_5d\1XP'p
以上程序可以写成
^4GwrG%Y2O0cout << std::hex << 3.4 << endl;LUPA开源社区W"z|yIJGM{5@
3、最方便的就是使用using namespace
5s$t8^-y/n/B0std;这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:LUPA开源社区0i
];Ka7E2YaR i
cout << hex << 3.4 << endl;
9tl'X`G9c0这段程序用到了标准模板库,在屏幕上打印字符a~z,其中main函数的标记式只有两种是被LUPA开源社区(T1`l\E\4gYKJ
C++标准委员会接受的,只有以下两种写法是符合C++标准的,是可移植的。即:LUPA开源社区oS$y hHg.C-?o"S
int main()
4OwPwq@~}r @0{LUPA开源社区hI,nyrY EqCBv
}
*nGv@RMA n0和
H&TMn.iJ?Y0int main(int argc, char* argv[])
t\ y`2nCa_ j0{
ySBpNM4_0}LUPA开源社区$F!nqz#dF
C++在main()的末尾定义了一个隐式的return 0; 但是在VC中必须显式的写出return语句。
0NkfDgA#q8j0在BCB中可以不写return而编译通过。
p(CfT!Q ~qf8i0这段程序中用到了STL中的容器:链表。先是向链表中插入26个字母,然后从遍历链表,输LUPA开源社区H!k$C']
Z;ef
出字符。
4d8?Obtc0我不建议初学者一开始就从模板库入手,但是我建议应该逐渐地有意识地学习模板库。如LUPA开源社区9leVLnz
我们应该熟悉cout和cin的用法(位于iostream),而减少使用老式的C函数库中printf和sc
N-Qc T!@7P$t}7o0anf等。LUPA开源社区0Ib6W'rQW#G|
从控制台入手的好处就是避免我们理解VC中向导等工具生成的其他代码,整个程序的流程
0I#P;e4O8h/{H0很清楚。新手学习VC的一大难点就是搞不清楚整个程序的流程(从那条语句开始执行,然后LUPA开源社区1ML1Te&S