技术开发 频道

C++的学习感想

【IT168 技术人生】很多人把学习C++语言当成学习VC了,我曾经就走过这样的弯路。当学了很长时间的VC后还是得回过头来学习C++语言本身。 

    学习C++从何处入手? 

   C++语言相对于C语言来说引入了两个大的新东西,一个就是面向对象(具体来将就是类),另外就是模板技术(模板编程或者叫泛型编程是进来非常流行的技术,在C#中虽然还没有对泛型编程的支持,但是相信在将来也一定会加入这一功能),模板是C++中比较复杂的部分,但是作为一个真正的C++程序员,这部分很重要。尤其是对C++标准程序库的掌握尤为重要。
 
   刚开始的时候千万不要直扑VC中的各种向导和设计器。因为依赖开发环境生成的很多代码会把我们搞糊涂,也不利于我们学习C++语言本身。我的建议就是生成一个空的控制台工程,然后自己向里面添加文件。如下就是一个简单的控制台程序:
//robindy/list.cpp #include #include using namespace std; int main() { list coll; for(char c = 'a'; c <= 'z'; ++c) { coll.push_back(c); } list::const_iterator pos; for(pos = coll.begin(); pos != coll.end(); ++pos) { cout << *pos << ' '; } cout << endl; return 0; }
   对using namespace std;的解释: 

   所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 
   
   由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择: 

   1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:
std::cout << std::hex << 3.4 << std::endl; 

   2、使用using关键字。 

   using std::cout; 
   using std::endl; 

   以上程序可以写成:
 
   cout << std::hex << 3.4 << endl; 

   3、最方便的就是使用using namespace std;
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写: 
   cout << hex << 3.4 << endl; 

   这段程序用到了标准模板库,在屏幕上打印字符a~z,其中main函数的标记式只有两种是被C++标准委员会接受的,只有以下两种写法是符合C++标准的,是可移植的。即:
int main() { } int main(int argc, char* argv[]) { }
   C++在main()的末尾定义了一个隐式的return 0; 但是在VC中必须显式的写出return语句。 

   在BCB中可以不写return而编译通过。 

   这段程序中用到了STL中的容器:链表。先是向链表中插入26个字母,然后从遍历链表,输出字符。 

   我不建议初学者一开始就从模板库入手,但是我建议应该逐渐地有意识地学习模板库。如我们应该熟悉cout和cin的用法(位于iostream),而减少使用老式的C函数库中printf和scanf等。 

   从控制台入手的好处就是避免我们理解VC中向导等工具生成的其他代码,整个程序的流程很清楚。新手学习VC的一大难点就是搞不清楚整个程序的流程(从那条语句开始执行,然后从那条语句退出。MFC做了太多封装,掩盖了事实的真相,^_^)。通过控制台我们可以很快地学习C++语言中的很多新特性。如类的封装、继承和多态等。通过这个时期的学习,要能够掌握三个东西: C++关键字、语法(重点是和面向对象有关的,以及模板)、C++标准程序库(知道怎么使用即可,要彻底掌握需要很多时间和精力)。至于与界面有关的东东(MFC中很大一部分是与界面相关的类,所以我认为MFC很臃肿而无聊!回头看过以前用MFC写的程序,有一种“垃圾”的感觉)。 

   自己做个测试: 

   写一个控制台程序,在其中体现出类的继承,函数重载,动态多态(通过虚函数实现),数据封装,C++标准库的运用。
如果你能够轻松搞定,恭喜你,你已经通过C++语言关了。不过C++实在是一个复杂的东东,其中有各种千奇百怪的语法现象,如果没有三、五年的功力,千万不要说自己懂C++。
 
   推荐书籍《Thinking in C++》(有精力的话,可以直接读原版) 《Essential C++》。 

   本来我计划继续说说如何来进入C++世界的,但是琢磨了一下,觉得还是要先解决一个问题:为什么要学习C++?我觉得在软件开发这个行当了里除了为了生计外,学习新东西都是应该以兴趣为导向的。所以撇开我个人对C++的偏爱,我想为你树立起学习C++的信心和兴趣。当初我对自己学习C++的第一个忠告就是:不能半途而废!起初是兴趣驱动,后来则是生计所需,最后还是回归到了兴趣。毕竟我从中得到了乐趣,这就足够了。在学一个新东西前,解决动机问题很重要。就如同杀人一样,如果只是突然兴起,那么等尝试了以后,是没有成就感的。革命先烈们为我们作出了很好的榜样,就算我们在学习C++的道路上遇到了太多困惑和痛苦,但是我们毕竟为自己的信念做了努力,我们知道自己在做什么,知道自己在追求什么。
0
相关文章