第1讲 C++与C语言的区别_第1页
第1讲 C++与C语言的区别_第2页
第1讲 C++与C语言的区别_第3页
第1讲 C++与C语言的区别_第4页
第1讲 C++与C语言的区别_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、田宜平田宜平 电话:电话mail: 中国地质大学计算机学院信息所中国地质大学计算机学院信息所武汉地大坤迪科技有限公司武汉地大坤迪科技有限公司http:/推荐参考教材推荐参考教材1. Visual C+ 实用教程实用教程刘惊雷编著刘惊雷编著 ,电子工业出版,电子工业出版社社 2.实用实用Visual C+ 6.0教程教程 美美 Jon Bates, Tim Tompkins著著 何健辉何健辉 董方鹏董方鹏 等译等译3. C+面向对象程序设计教程面向对象程序设计教程 陈维兴陈维兴 林小茶林小茶 编著编著4. C+程序设计教程程序设计教程 钱能钱能 编著编著 清华大学出版社

2、清华大学出版社一、实习编程报告一、实习编程报告 题目不固定(三种类型)题目不固定(三种类型) 1. 布置布置 2. 你感兴趣的你感兴趣的 3. 你的课题中的一个问题你的课题中的一个问题 要求要求: 源程序和报告用源程序和报告用Email交交二、平时成绩(包括考勤)二、平时成绩(包括考勤)三、笔试(闭卷)(平时成绩三、笔试(闭卷)(平时成绩30%,考试成绩,考试成绩70%)Visual C+程序设计的主要内容程序设计的主要内容第一部分第一部分C+语言基础知识(预备知识)语言基础知识(预备知识) 主要介绍主要介绍C+语言与语言与C语言不同的内容语言不同的内容第二部分第二部分面向对象程序设计(重点内

3、容)面向对象程序设计(重点内容) 主要讲述面向对象程序设计的基本思想与原主要讲述面向对象程序设计的基本思想与原理理第三部分第三部分面向对象程序设计实例(实践操作面向对象程序设计实例(实践操作 主要讲解主要讲解MFCWindows编程等实例、单文档、编程等实例、单文档、多文档、对话框以及多文档、对话框以及OpenGL。1.1 C+语言的起源和特点语言的起源和特点1.2 C+语言与语言与C语言的关系语言的关系1.3 C+语言展望语言展望1.1.1 C+语言的起源语言的起源1、C+语言是从语言是从C语言继承来的,主要语言继承来的,主要表现在语句形式、模块化程序设计表现在语句形式、模块化程序设计2、C

4、语言对大而复杂的系统是力不从心语言对大而复杂的系统是力不从心的的3、80年年Bell实验室改进实验室改进ANSI C 产生产生C+语言语言( ANSL:美国国家标准研究所美国国家标准研究所) 1.1.2 C+语言的特点语言的特点1、C+语言是支持面向对象的设计语言语言是支持面向对象的设计语言 把具有共同特征和行为的实体的集合把具有共同特征和行为的实体的集合归纳成归纳成类类,程序是相互联系的离散对,程序是相互联系的离散对象的集合象的集合2、封装性封装性:通过类,将数据和操作封装通过类,将数据和操作封装3、继承性继承性:原有原有C+代码方便移植新程序代码方便移植新程序4、多态性多态性:相似而性质不

5、同的操作,有相相似而性质不同的操作,有相同名称(通过虚函数来实现函数对不同名称(通过虚函数来实现函数对不同参数产生不同的动作)同参数产生不同的动作)1.2 C+语言与语言与C语言的关系语言的关系1.2 .1 C+语言与语言与C语言的联系语言的联系 C语言的特点:语言的特点:1、它是一种结构化程序设计语言、它是一种结构化程序设计语言2、它可以部分代替汇编语言、它可以部分代替汇编语言3、它提供了丰富的数据类型和运算、它提供了丰富的数据类型和运算 1.2 C+语言与语言与C语言的关系语言的关系1.2 .2 C+语言与语言与C的主要区别的主要区别 1、C+语言引进了类的概念,而语言引进了类的概念,而C

6、语语言的结构只是数据的集合言的结构只是数据的集合2、 C+语言沿用了语言沿用了C语言的结构语言的结构3、 C+语言新增加的关键字语言新增加的关键字classprivate, protected ,public this new delete friend operateinline virtual1.2 C+语言与语言与C语言的关系语言的关系1.2 .3 C+语言与语言与C的细小区别的细小区别1、C+语言保留了语言保留了C的注释的注释 /* */增加行注释增加行注释/2、const 关键字关键字 #define Number 1 const Number 1它们功能相同,但后者编译要进行严它们

7、功能相同,但后者编译要进行严格的类型检查。在格的类型检查。在C+都用都用const 例如:例如:C+:const int Number=1,n=10;const int Number=1,n=10;void main()void main() int a;int a;const int const int * *p;/p;/申明指向常量的指针申明指向常量的指针 p=&Number;p=&Number;p=&n;p=&n; * *p=1;/p=1;/错误错误int n1=3;int n1=3;int const n2=5;int const n2=5;int in

8、t * *const pn= &n1;const pn= &n1; / /申明指针常量申明指针常量pn=&n2; /pn=&n2; /错误错误* *pn=6; /pn=6; /正确正确 常指针常指针使用使用constconst修饰指针时,由于修饰指针时,由于constconst的位置不同,而的位置不同,而含意不同。下面举两个例子,说明它们的区别。含意不同。下面举两个例子,说明它们的区别。 l(1).若声明若声明指针常量指针常量,则指针,则指针pn所指向的变量是可所指向的变量是可以更新的,不可更新的是常量指针以更新的,不可更新的是常量指针pn所指的方向所指的方向

9、。l例:例:int n1=3;int const n2=5;int *const pn= &n1; pn=&n2; /错误*pn=6; /正确(2).若声明为若声明为指向常量的指针指向常量的指针,则指针,则指针pn所指所指向的常量是不可以更新的,但可更新的是指针向的常量是不可以更新的,但可更新的是指针pn所指的方向所指的方向 。l例:例: int n1=3;int const n2=5;const int *pn= &n1; pn=&n2; /正确*pn=6; /错误1.2 .3 C+语言与语言与C的细小区别的细小区别3、构造变量的说明不必在之前加、构造变量的说

10、明不必在之前加struct 例如:例如: C: struct Astruct aS; (结构结构) union Aunion aU;(联合)(联合) enum Bool aB;(枚举)(枚举)C+: Astruct aS; (结构结构) Aunion aU;(联合)(联合) Bool aB;(枚举)(枚举)4、变量的说明可放在程序任何位置、变量的说明可放在程序任何位置例如例如(for int i=0;i100;i+)1.2 .3 C+语言与语言与C的细小区别的细小区别5、域运算符:、域运算符: 有全局作用域,文件有全局作用域,文件作用域,类作用域,函数作用域。作用域,类作用域,函数作用域。通过

11、通过“:”域限定符标识。域限定符标识。 例:例:int i; main() int i; i=5; /对局部量对局部量i :i=10; /对全局量对全局量i /“:”域限定符。域限定符。 1.2 .3 C+语言与语言与C的细小区别的细小区别6、输入、输入/输出输出 C+:couta; C: scanf(%d,&a); C+:coutaendl; C: printf(%dn,a); C+:#include C: #include1.2 .3 C+语言与语言与C的细小区别的细小区别7、动态单元、动态单元 C:#include float*p; p=(float*)malloc(sizeof

12、(float); free p; q=(int*)calloc(10,sizeof(int); C+: float*p;p=new(float); delete p; q=new int10;#include /例子例子example1.cppvoid main()int i,m,len;int *p;coutinput number of data:m;p=new intm;if(p=NULL)coutfail!;return;coutinput dataendl;for(i=0;ipi;len=0; coutinput dataendl;for(i=0;im;i+)len+=pi*pi;c

13、outsqr_sum=lenendl;delete p;1.2 .3 C+语言与语言与C的细小区别的细小区别8、引用与引用调用、引用与引用调用 引用为一个对象产生第二个名称,引引用为一个对象产生第二个名称,引用本身不是一个变量,只是一个变用本身不是一个变量,只是一个变量的别名。定义如下:量的别名。定义如下:类型说明类型说明 &引用引用=被引用的变量名;被引用的变量名;如:类型说明如:类型说明 &A=B;我们称我们称A是是B的引的引用。用。 u引用的一些规则如下:引用的一些规则如下: (1)引用被创建的同时必须被初始化(指针则可以)引用被创建的同时必须被初始化(指针则可以在任何时

14、候被初始化)。在任何时候被初始化)。 (2)不能有)不能有NULL引用,引用必须与合法的存储单引用,引用必须与合法的存储单元关联(指针则可以是元关联(指针则可以是NULL)。)。 (3)一旦引用被初始化,就不能改变引用的关系()一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。指针则可以随时改变所指的对象)。u变量引用:以下示例程序中,变量引用:以下示例程序中,k被初始化为被初始化为i的引用的引用。语句。语句k = j并不能将并不能将k修改成为修改成为j的引用,只是把的引用,只是把k的的值改变成为值改变成为6。由于。由于k是是i的引用,所以的引用,所以i的值也变成了的值也

15、变成了6。 int i = 5; int j = 6; int &k = i; k = j; / k和和i的值都变成了的值都变成了6; 按引用传递按引用传递就是封装了的按指针传递!就是封装了的按指针传递! int test(int &a, int int test(int &a, int * *b); b); 其中其中a a为按引用传为按引用传递,递,b b为按指针传递!都可以修改原参数的值,如为按指针传递!都可以修改原参数的值,如 int a1 = 10; int a1 = 10; int c = 5; int c = 5; int int * *b1 = &

16、c; b1 = &c; test(a1, b1); test(a1, b1); 函数里面就可修改原变量函数里面就可修改原变量a1a1和和c c的值的值. . 只不过在只不过在test()test()中用中用a=20a=20就可以修改就可以修改a1a1的值,而需要的值,而需要* *b=30 b=30 修改修改c c的值!的值!uint test(int &a, int *b)ua=20;*b=30;return 0;uu会发现会发现“引用传递引用传递”的性质象的性质象“指针传递指针传递”,而书写方式象,而书写方式象“值传递值传递”。实际上。实际上“引用引用”可以做的任何事情可以做

17、的任何事情“指针指针”也都能够做,也都能够做,为什么还要为什么还要“引用引用”这东西?这东西? 答案是答案是“用适当的工具做恰如其分的工作用适当的工具做恰如其分的工作”。 指针能够毫无约束地操作内存中的任何东西指针能够毫无约束地操作内存中的任何东西,尽管指针功能强大,但是非常危险。就象,尽管指针功能强大,但是非常危险。就象一把刀,它可以用来砍树、裁纸、修指甲、一把刀,它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用?理发等等,谁敢这样用? 如果的确只需要借用一下某个对象的如果的确只需要借用一下某个对象的“别名别名”,那么就用,那么就用“引用引用”,而不要用,而不要用“指针指针”,以免发生意外

18、。,以免发生意外。1.2 .3 C+语言与语言与C的细小区别的细小区别9、函数重载、函数重载-静态多态性静态多态性 函数的重载是面向对象程序设计的多函数的重载是面向对象程序设计的多态性的实现,重载使得态性的实现,重载使得:l在同一个函数名下,有该函数的多在同一个函数名下,有该函数的多个具体实现个具体实现;l不同的具体实现有不同参数列表不同的具体实现有不同参数列表;在函数被调用时,编译器通过对函数在函数被调用时,编译器通过对函数的实参和形参进行最大限度的匹配,的实参和形参进行最大限度的匹配,选择一个该函数的具体实现。选择一个该函数的具体实现。 比方说加法,加法可以用于整数和有理数等比方说加法,加

19、法可以用于整数和有理数等在在C+C+里可以用两个函数来实现这个目的。里可以用两个函数来实现这个目的。int int intaddintadd( int v1 , int v2 )( int v1 , int v2 ) return v1+v2;return v1+v2; float float floataddfloatadd( float v1 , float v2 )( float v1 , float v2 ) return v1+v2;return v1+v2; 使用的方式是这样的使用的方式是这样的int ia = 1 , ib = 2 , iab = 0;int ia = 1 , i

20、b = 2 , iab = 0;float fa = 1.0 , fb = 2.0 , fab = 0.0;float fa = 1.0 , fb = 2.0 , fab = 0.0;iab = iab = intaddintadd( ia ,ib );( ia ,ib );fab = fab = floataddfloatadd( fa , fb );( fa , fb );这样看起来很不直观,可读性不强,我们的这样看起来很不直观,可读性不强,我们的目的是让人一眼就可以看出是在做相加运算。目的是让人一眼就可以看出是在做相加运算。 两个函数的返回值和参数并不一样,这样两个函数的返回值和参数并不一样,这样就可以区别开两个不同的行为。这个特性可不就可以区别开两个不同的行为。这个特性可不可以利用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论