日历
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | 5 | |||||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 | |||
| 13 | 14 | 15 | 16 | 17 | 18 | 19 | |||
| 20 | 21 | 22 | 23 | 24 | 25 | 26 | |||
| 27 | 28 | 29 | 30 | 31 | |||||
搜索标题
c++学习感想
2007-09-13 22:24:32
C++的学习感想
:S]WWcf8[S'u2T0原作者姓名 robindy LUPA开源社区$mr/\4S8?Y
正文LUPA开源社区|6I7@"J:Wa8Y [[
很多人把学习C++语言当成学习VC了,我曾经就走过这样的弯路。当学了很长时间的VC后LUPA开源社区[D#h
jb
q!b&sr
还是得回过头来学习C++语言本身。
那么学习C++从何处入手了?LUPA开源社区`0H U%Bb,~
C++语言相对于C语言来说引入了两个大的新东西,一个就是面向对象(具体来将就是类LUPA开源社区e!qO:Q#a6W2V$b
),另外就是模板技术(模板编程或者叫泛型编程是进来非常流行的技术,在C#中虽然还LUPA开源社区(CQ|E$w8f"c.p
没有对泛型编程的支持,但是相信在将来也一定会加入这一功能),模板是C++中比较复LUPA开源社区l2p[uPz6gA+n
杂的部分,但是作为一个真正的C++程序员,这部分很重要。尤其是对C++标准程序库LUPA开源社区;^6_BvY]
的掌握尤为重要。LUPA开源社区.^ mT;NC
刚开始的时候千万不要直扑VC中的各种向导和设计器。因为依赖开发环境生成的很多代码
2fr7C
]
M,D$yq0会把我们搞糊涂,也不利于我们学习C++语言本身。我的建议就是生成一个空的控制台工LUPA开源社区g:[G'd%Cj
程,然后自己向里面添加文件。
7Nq/Ka1t]D'd^8P0如下就是一个简单的控制台程序:
"xop Gl|$z_0//robindy/list.cpp
#include <iostream>LUPA开源社区x#|#Qrt*{
#include <list>
using namespace std;
int main()
O/Z9^#YgH$QVtM0{LUPA开源社区2d8G
T3nL"C"W
list<char> coll;
for(char c = 'a'; c <= 'z'; ++c)
$p_ iJhr:Nz\0 {LUPA开源社区/s[Vz!uT*L
coll.push_back(c);
$E-srHf1a'C1V!kEMc0 }
list::const_iterator pos;LUPA开源社区O5M j].e
for(pos = coll.begin(); pos != coll.end(); ++pos)
[ ?T)e2n/x0 {LUPA开源社区5fhC"G K8t
cout << *pos << ' ';LUPA开源社区&`[`
c8PrC_~0m
}
'gY^p(lD0 cout << endl;
return 0;LUPA开源社区.O+M#ejOUFS
}
对using namespace std;的解释:LUPA开源社区 P)A6G.p!Ogu
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。LUPA开源社区ro+k"O H#~
由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:
i4Z1?
X;V01、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:LUPA开源社区I Wo?(]0A3{+E
std::cout << std::hex << 3.4 << std::endl;LUPA开源社区1q CJ}Y&_b
2、使用using关键字。
dz/a8s*nf,ef.AI0using std::cout;
}J9E"Zl(S0using std::endl;
i\Q m:Q0x|jWv0以上程序可以写成LUPA开源社区~ V7~+dB]\;P6V
cout << std::hex << 3.4 << endl;LUPA开源社区Y3h9}/VtZ6gA.~&DR
3、最方便的就是使用using namespace
g PVM$c0std;这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:LUPA开源社区 z6E"X:j$~6P
cout << hex << 3.4 << endl;
这段程序用到了标准模板库,在屏幕上打印字符a~z,其中main函数的标记式只有两种是被
%g:u!ykGS0C++标准委员会接受的,只有以下两种写法是符合C++标准的,是可移植的。即:LUPA开源社区!u'w
fa${p
\6b
int main()LUPA开源社区bmT!C
xbYA"j%KG
{LUPA开源社区GZP-cxJ
}
*},qA
sQ"U;{\0和
+S.X
y!y8t4rE5_ b0int main(int argc, char* argv[])
+\3h~'z&r`UQq0{
!aBNUE3Ah0}LUPA开源社区,M1I"irh
J
C++在main()的末尾定义了一个隐式的return 0; 但是在VC中必须显式的写出return语句。
G,H)Z2qI.g0在BCB中可以不写return而编译通过。LUPA开源社区
w~p#P:Sd0N)oI@%C
这段程序中用到了STL中的容器:链表。先是向链表中插入26个字母,然后从遍历链表,输LUPA开源社区a"gr#Ii8@
出字符。LUPA开源社区]sU5sey(_
我不建议初学者一开始就从模板库入手,但是我建议应该逐渐地有意识地学习模板库。如
O F ^1j%Bi0我们应该熟悉cout和cin的用法(位于iostream),而减少使用老式的C函数库中printf和sc
,}r2y |.v-C?#M0anf等。
从控制台入手的好处就是避免我们理解VC中向导等工具生成的其他代码,整个程序的流程LUPA开源社区Z)sZ-x%P:Q
很清楚。新手学习VC的一大难点就是搞不清楚整个程序的流程(从那条语句开始执行,然后
tJ-E^ gGj(a0从那条语句退出。MFC做了太多封装,掩盖了事实的真相,^_^)。通过控制台我们可以很快
)b#d8e2L2?!yG8V*?0地学习C++语言中的很多新特性。如类的封装、继承和多态等。通过这个时期的学习,要LUPA开源社区'[y.i,D/^"O{:H/G
能够掌握三个东西: C++关键字、语法(重点是和面向对象有关的,以及模板)、C++
|]e*|4D-a0标准程序库(知道怎么使用即可,要彻底掌握需要很多时间和精力)。至于与界面有关的LUPA开源社区
o,W.cV;Hna3?,E:T
东东(MFC中很大一部分是与界面相关的类,所以我认为MFC很臃肿而无聊!回头看过以前
~,\p^,VbKg`6@0用MFC写的程序,有一种“垃圾”的感觉。)LUPA开源社区0s
sD
n{}@h K
自己做个测试:LUPA开源社区!K.q:b9JA0g7X3H
写一个控制台程序,在其中体现出类的继承,函数重载,动态多态(通过虚函数实现),LUPA开源社区,no$Dd0ukR
数据封装,C++标准库的运用。
