学习C++(一) 我现在理解的C++

原创 2003年09月09日 09:10:00

                       学习C++(一) 

               我现在理解的C++

/*种种原因,很多精力要投入到java的学习和使用中去了,想形成一个学习C++的系列文章,没有什么风格,也没有什么时间表,想到哪就去写。这里把以前自己另外一个ID发表的一篇文章的一部分作为这个系列的第一篇,算是开头吧。*/

学习C++重在理解其各种语言设施所代表的语义,以及C++所能表示的语义所代表的设计思想。首先从宏观上入手,你需要明白的是C++是程序设计语言的本质。在此我把C++最重要的性质写下来:C++是一门静态类型检查,基于C内存模式,支持四种基本程序设计范型的语言。注意,这里说明了三个本质特性,静态说明了语言的类型检查性质,基于C内存模式告诉我们在C++中所有与内存有关的操作都需要程序员自己来负责,这样就带来了很多设计程序时的需要注意的地方,而理解支持的四种基本范型却是理解各种语言设施的基础。然后记住C++的最大的一点设计哲学,也是其贯穿应用C++的一条本质,我引用《C++ PRIMER》中文版前言内的一句话表示--C++的基础是各种设施,它们让用户能够通过定义新的数据类型来扩展语言本身,这些新类型可以与内置类型一样的使用方式(如何理解这句话是关键,我的理解是:用户定义类型可以在任何使用内置类型的时候做为其替代,再具体点说就是用户定义类型可以象内置类型那样可以被声明,其对象可以被初始化,可以相互复制,可以象内置类型对象那样和很多操作符一起使用,可以被作为参数传递给函数,可以作为函数的返回值,可以作为容器的操作对象,用户定义类型可以和内置类型一样作为模板的参数),掌握这些设施(哪些设施?就是让用户定义类型可以和内置类型一样方便使用的设施,包括什么?构造,拷贝,解构函数,操作副重载.....)的第一步就是理解基本语言(什么是基本语言?就是C++better c部分)。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

在此,我还想提出一点十分重要的概念:一门语言的最本质的东西就是其类型系统,任何语言都有自己的独特的类型系统,学习C++就是学习他的类型系统。所以首先需要彻底明白什么是数据类型这个概念。这样你的思路就清楚了,你有选择,从每一种C++支持的设计范型入手学习。

 

结构化设计-----也就是C++中的better c部分,你需要在C的基础上学会函数重载和引用这两个最重要的语言新特心性。

 

基于对象----你需要建立C++最强大的概念--类,也就是用户定义类型,这其实就是数据结构里面接触的抽象数据类型的概念,以及合理构造使用类的一系列语言措施。并始终记住,在C++进行设计时用类来表示我们需要表示的概念。类也是C++抽象机制里面最核心的概念。

 

面向对象----在这里你需要知道继承和多态这样的OO概念,以及句柄类这样常见的设计技术,这里你需要明白你开始进入了对接口编程的阶段。同时你要学会OO思想,C++的一些设施只是为了把OO思想在语言所支持的语义中充分的表示出来。但是在这里,同时你需要明白的C++能表示的语义是受到其当初语言设计原则限制的(什么原则?静态类型检查,不为不需要的东西付出代价,选择权在程序员手上语言本身不去强迫程序员的做出选择),也就是说C++所能表示的OO思想可以称为具有C++特色的OO思想了。这样的OO思想和JAVA所代表的纯OO哪个更好?没有定论,因为他们本身的设计理念就不一样。

 

泛型设计----这里你需要明白最重要的一点是C++temlate机制无论其开始建立的初衷是什么,现在他所代表的真实含义是:编译时类型推导,也就是编译时多态,由此明白了泛型的核心---把各种类型当作一种抽象条件的具体化,C++有措施可以定义抽象条件吗?没有,所以这些条件只能定义在我们自己的心中,但我们可以把具体化的类型当作一种抽象条件实现在template机制中去,从而使tempalte成为比类型推导机制更进一步的东西,那就是抽象条件的推导。也就是说,我们不再把template接受的参数看成是类型,而是把template看成是一种接受抽象条件的机制,无论其类型如何,只要这种类型满足tempalte所接受的抽象条件就可以作为参数传递进去,这样就代表了一种泛型的思想-----类型不再是根本,抽象条件才是,类型不过是抽象条件的外衣和在C++中的实现方式而已。在结合基于对象和泛型设计这两种抽象设计模式的技术上诞生的工业产品就是---STL

C#——一个简单的文件管理器

最近在紧张的学习C#,说实话对C#之前没有太多的接触过,只知道C#的特性与java很相似,接触了之后才发现C#跟java相比区别不是很多,但它是一门实现程序能力比Java还要好的语言(仅代表个人观点)...
  • u012200908
  • u012200908
  • 2015年04月05日 20:16
  • 2921

DeepLearning(深度学习)原理与实现

DeepLearning(深度学习)原理与实现(一) 源自:http://blog.csdn.net/marvin521/article/details/8886971  经过三年的狂刷理论,觉得...
  • chinaliping
  • chinaliping
  • 2013年08月07日 14:06
  • 4000

学习C语言常见的几个问题及解决方法

所有初学者面临的第一个问题便是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。   ...
  • bentengdehe
  • bentengdehe
  • 2016年04月28日 16:52
  • 1385

我在合肥达内学习c++,现在找到了满意的工作

亲爱的小曾老师和诸位即将来达内或者已经在学习的学员:   经过在合肥达内的四个多月的c++学习,我现在已经成功就业于武汉**视通科技有限公司。   坦白说,学习的前期我一直都很积极...
  • ahtarenacom
  • ahtarenacom
  • 2014年11月19日 16:32
  • 485

关于c++的编译器现在有很多

  • 2008年11月01日 22:10
  • 27KB
  • 下载

c++面试题(面试经验)自己收集自己总结 现在分享给大家

  • 2009年03月13日 15:11
  • 173KB
  • 下载

C++工作现在需求怎么样,如何应对

出自:http://mt.sohu.com/20160301/n439052889.shtml  又是换职季,又有很多感触。在找工作的过程,发现了C++工作的需求走向,为了更好找到C++工作,我们需要...
  • wangshubo1989
  • wangshubo1989
  • 2016年03月01日 22:17
  • 8583

【华为上机试题C++】老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括多组测试数据。 每组输入第一行是两个正整数N和M(0 ...
  • DoverMine
  • DoverMine
  • 2015年09月08日 10:12
  • 3102

现在我是很反感C++这个语言

应当讲我现在是很不喜欢C++这个语言。 不仅仅语言复杂,这其实倒也无所谓,但问题是:C++是“一次编写,到处编链(生成),各种编链不过”,这就是C++的真正特点。这两天弄那个Teigha的CAD文件处...
  • quanben
  • quanben
  • 2012年10月31日 21:55
  • 1798

C++ 100款开源界面库——内容细节(现在有变动)不必深究,普及就好

C++ 100款开源界面库 (10) from:http://www.cnblogs.com/Alberl/p/3375162.html (声明:Alberl以后说到开源库,一般都是指著名的、或...
  • lxw907304340
  • lxw907304340
  • 2015年12月30日 16:18
  • 876
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习C++(一) 我现在理解的C++
举报原因:
原因补充:

(最多只允许输入30个字)