第1章_认识C++的对象_第1页
第1章_认识C++的对象_第2页
第1章_认识C++的对象_第3页
第1章_认识C++的对象_第4页
第1章_认识C++的对象_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、1C+程序设计教材:机械工业出版社教材:机械工业出版社/刘振安刘振安2第一章认识C+的对象需要了解的C语言知识C C语言基本语法语言基本语法if else if else 语句语句 forfor语句语句whilewhile语句语句3本节要点本节要点:C与C+的关系(领会)掌握函数原型和命名空间的使用方法(综合应用)对象和预处理基本概念(领会)掌握C+程序的基本结构(综合应用)1.1 1.1 初识初识C+C+的函数和对象的函数和对象C语言回顾语言回顾int x; 该语句在C语言和C+中均可使用,x在C语言中称为变量,在C+中称为对象。 C语言与C+的不同点:称呼不同4C语言回顾语言回顾结构体的定

2、义结构体的定义1struct point float x; float y; ; struct student int num; char name10; float grade; ; 结构体的定义结构体的定义25#include using namespace std;int result (int, int);const int k=2; struct Point int x,y; ;int main ( ) /主程序 int z(0), b(0); Point a; couta.xa.y; z=(a.x+a.y)*k; z= result(z,b); cout “result is :”

3、endl; cout “z=“ zendl; return 0int result (int a, int b) return a+b; /* 1-1.cpp*/ #include int result (int, int); #define k 2 struct Point int x,y; ;int main ( ) /*主程序*/ int z=0, b=0; Point a; printf (“ Input two interger:”); scanf(“%d%d”,&a.x,&a.y); z=(a.x+z.y)*k; z= result(z,b); printf (“r

4、esult is :”); printf (“z=%dn“ ,z); return 0int result (int a, int b) return a+b; / 1-1.c6例例1.1输入一个点的信息,求该点到原点的距离输入一个点的信息,求该点到原点的距离对程序的说明:对程序的说明:1,混合型语言C语言程序包含main函数; 面向对象语言没有main函数C+是混合型语言; C+ 兼容C的语法,带类的C文件扩展名 cpp h main()对程序的说明:2,注释方式/* 。*/。7对程序的说明:对程序的说明:3 3,输入输出流,输入输出流cincin和和coutcout是C+语言中进行输入输出

5、操作的函数。cin ,cout 在的声明在头文件iostream中,所以要想使用,必须将该头文件包括在程序开始处。类似:C语言中printf函数scanf函数putchar函数getchar函数,使用时要包含“stdio.h” C C+将数据从一个对象传到另一个对象称为流。将数据从一个对象传到另一个对象称为流。coutcout 是C+中的标准输出流(通常为控制台,即屏幕), cout “hello c” 把一串字符串插入输出流(控制台输出)中。 是插入操作符。cout后加要输出的内容,可以是对象或字符串,行末加分号,可用多个来分隔多个输出对象,endl;表示输出后换行。 coutendl; 等

6、价于 couta.xa.y;将键盘输入的值赋予两个变量 是提取操作符。cin后加存放数据的对象,即变量,行末加分号,可用多个来分隔多个输入对象。cinxy;等价于 cinx;ciny;8对程序的说明:对程序的说明:4 4,使用命名空间,使用命名空间是C+语言中封装程序库名称的一种机制记忆:C+标准类库中的对象和函数都属于std命名空间使用这些对象和函数时要using namespace std;使用使用stdstd命名空间时注意:命名空间时注意:使用使用C C语言中的头文件时,要写成语言中的头文件时,要写成“xxx.hxxx.h”形式形式使用使用C+C+中的头文件则不能加上中的头文件则不能加上

7、“.h.h”using namespace std; C+标准函数库的所有元素都被声明在一个名空间中,这就是std名空间。因此为了能够访问它的功能,我们用这条语句来表达我们将使用标准名空间中定义的元素。这条语句在使用标准函数库的C+程序中频繁出现,本教程中大部分代码例子中也将用到它。9对程序的说明:对程序的说明:5 5,对象定义及初始化,对象定义及初始化int x;x=0;等价于 int x=0; C语言int x(0); C+语言等价于上两条语句。此种初始化语法在C+中称为构造函数语法6 6,函数原型及其返回值,函数原型及其返回值函数要有类型,若要得到处理结果则要使用return语句。函数原

8、型声明函数原型声明函数调用在函数定义之前时要对函数进行声明函数调用在函数定义之前时要对函数进行声明10例:例:int result (int,int);int result (int,int);C+ 要求所有函数都有函数原型程序的顶部头文件函数类型应和返回值的类型一致。C提供更强的类型检查,允许编译程序对下列情况报错误信息:被调用函数参数类型定义和类型转换非法函数的参数个数不相符函数不能返回预定的数据类型对程序的说明:对程序的说明:7 7,constconst修饰符和预处理程序修饰符和预处理程序常量定义:#define PI 3.1415 (c语言)在变量定义之前加上const关键字,表示定义

9、的变量值不可改变。const int PI=3.1415;const int PI(3.1415);一个常量(一个常量(constantconstant)是一个有固定值的表达式)是一个有固定值的表达式。(1) #define PI 3.14159265 #define tab n #define width 100(2 2)通过使用)通过使用constconst前缀,你可以定义指定类型的常量,就像定义一个变量一样前缀,你可以定义指定类型的常量,就像定义一个变量一样: :const int width = 100;const char tab = t;const int width(100);c

10、onst int width ;117 7,constconst修饰符和预处理程序修饰符和预处理程序C+预处理命令以#开始,分为宏定义,文件包含和条件编译 对程序的说明:对程序的说明: 8 8,程序运行结果,程序运行结果 9 9,程序书写规则,程序书写规则 注意缩进对齐,使程序清晰明了121.2 认识认识C+语言面向过程编程的特点语言面向过程编程的特点本节要点本节要点:函数重载(领会)掌握C+的新数据类型(简单应用)动态分配内存(综合应用)熟练掌握引用的使用方法(综合应用)了解对指针使用const限定符的目的,方法(识记)了解泛型算法应用于普通数组的方法(识记)掌握数据的简单输入输出(简单应用

11、)13函数具有相同的名字,但有不同的参数,完成不同的操作和功能。函数具有相同的名字,但有不同的参数,完成不同的操作和功能。重载函数至少在参数的个数、参数的类型、或参数的顺序上有所不同重载函数至少在参数的个数、参数的类型、或参数的顺序上有所不同。/ overloaded function#include using namespace std;int divide (int a, int b) return (a/b); float divide (float a, float b) return (a/b); int main ( ) int x=5,y=2;float n=5.0,m=2.0

12、;cout divide (x,y);cout n;cout divide (n,m);cout n;return 0; 1.2.1函数重载函数重载(领会领会)C+允许一个函数定义多个版本。使得一个函数完成多种功能。允许一个函数定义多个版本。使得一个函数完成多种功能。即:同一个函数名定义多次。即:同一个函数名定义多次。14重载函数重载函数max的定义形式的定义形式:重载函数重载函数max的声明形式:的声明形式:重载函数重载函数max的调用形式的调用形式:151.2.2 C+的新数据类型的新数据类型(简单应用简单应用)16171.2.3 动态分配内存动态分配内存(综合应用综合应用) new 动态

13、分配内存一般格式: 指针变量=new 类型 size; new 运算符得到新分配空间的首地址,赋值给指针变量后,可根据指针变量的加减运算来使用这些空间。delete 释放内存 使用完毕后要释放内存delete p; 操作符new的存在是为了要求动态内存。new 后面跟一个数据类型,并跟一对可选的方括号 里面为要求的元素数。它返回一个指向内存块开始位置的指针。其形式为:p = new 类型名; 用来给一个单元素的数据类型分配内存。p = new 类型名 SIZE; 用来给一个数组分配内存。操作符操作符new new 和和new new 18给一个数组分配内存给一个数组分配内存int a10,in

14、t a10,* *p=a,i;p=a,i;for (i=0;i10;i+)for (i=0;i10;i+) scanf( scanf(“%d%d”,p+i);,p+i);for (i=0;i10;i+)for (i=0;ik;/k=10cink;/k=10p= new intk;p= new intk;for (int i=0;ik;i+)for (int i=0;i cin* *(p+i);(p+i);for (i=0;ik;i+)for (i=0;ik;i+) coutpi coutpi“ “; ;delete p;delete p;给一个单元素的数据类型分配内存给一个单元素的数据类型分配

15、内存#include using namespace std;struct Point int x,y; ;int main ( ) /主程序 Point *p; p = new Point ; coutp-xp-y ; coutxy ; delete p; return 0;#include struct Point int x,y; ;int main ( ) /*主程序*/ Point a *p; p=&a; printf (“ Input two interger:”); scanf(“%d%d”,&a.x,&a.y); printf(“%d%d”,a.x,a.

16、y); return 0;19 删除操作符删除操作符 delete delete 既然动态分配的内存只是在程序运行的某一具体阶段才有用,那么一旦它不再被需要时就应该被释放,以便给后面的内存申请使用。操作符delete 因此而产生,它的形式是:delete pointer;delete pointer; 第一种表达形式用来删除给单个元素分配的内存,第二种表达形式用来删除多元素(数组)的内存分配。在多数编译器中两种表达式等价,使用没有区别, 201.2.4 引用的使用方法引用的使用方法(综合应用综合应用) C+中新的表示形式。 引用即使用变量的别名。 定义形式:数据类型数据类型 & 别名别

17、名=对象名;对象名;作用:别名与对象名对应同一个对象,共用同一段内存。对别名的修改会造成原对象的修改。例如:int x; int &a=x; 表示a是变量x的别名。 一旦定义别名后则a和x完全等价。引用是指给对象的地址取个别名,引用是指给对象的地址取个别名, int a=56, b ; int a=56, b ; int &ra1=a; int &ra2=ra1; int &ra1=a; int &ra2=ra1; 对别名的改动则是对正名的改动。对别名的改动则是对正名的改动。引用不占有存储空间,别名和对象(正名)占有相同存储空间引用不占有存储空间,别名和

18、对象(正名)占有相同存储空间214, 可以声明对指针的引用。 int x, *p2=&x; int * &p1=p2; int * &p3= p2; p1= &x; int x=56; int &a=x; int *p= &x; int *p= &a;使用引用时注意:使用引用时注意:1,引用作为函数参数-地址传递2,不能声明对引用的引用 int& &r=x;3,不能直接定义数组的引用1.2.4 引用的使用方法引用的使用方法(综合应用综合应用)一般格式:typedef 类型 类型别名使用typedef定义某类型别名后,可使用

19、该别名来定义相关对象。例如:typedef long int lint;则 long int i ; 等价于 lint i ;typedef用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型别名替代类型名,然后把关键字typedef加在该语句的开头 Typedef使用说明22等价于等价于间接引用数组名作参数间接引用数组名作参数array &b=x;array &b=x;23例例 1-41-4#include using namespace std;void main ( ) int x=56; int &a=x; int &r=x; cout

20、x=x &x=&xendl; couta=a &a=&aendl; coutr=r &r=&rendl; r= 78; coutafter r=78endl; coutx=x &x=&xendl; couta=a &a=&aendl; coutr=r &r=&rendl;例例 1-5 1-5 间接引用数组间接引用数组#include using namespace std;typedef int array10;void main ( ) array a=1,2,3,4,5,6,7,8,9,10;

21、array &b=a; b9=0; cout b10 endl; for (int i=0;i10;i+) coutbi ; coutendl; cout a10 endl; for (i=0;i10;i+) coutai ; coutendl;241.2.5 对指针使用对指针使用const限定符限定符(识记识记)const int *p; 表示*p是常量,不能被赋值, *p=66;2. 指向常量的指针指向常量的指针#include using namespace std;void main ( ) const int y=58; const int *p=&y; int x=

22、45, z; const int *p1=&x; z=*p1+*p; coutz=zendl; p1= &y; /*p1=y; z=*p1+*p; coutz=zendl; 251.2.5 对指针使用const限定符(识记)int x=45 ,y ; int * const p=&x; 表示p是常量,需要初始化 p 不能被赋值, p=&y;#include using namespace std;void main ( ) int y=58, x=66; int * const p=&y; cout“y=yendl; *p=66; /p=&x;

23、cout“y=yendl; 261.2.5 对指针使用对指针使用const限定符限定符(识记识记)1.2.6 泛型算法应用于普通数组泛型算法应用于普通数组(识记识记)泛型算法是C+ 标准模板库(Standard Template Library)提供的一组操作。利用这些操作可以简化数组操作。要使用这些操作必须包含头文件271.2.6 泛型算法应用于普通数组(识记)假定a,b是两个数组名,其长度为len操作示例:1,reverse(a, a+len)将数组a中的元素顺序反转。(逆向)2,copy(a, a+len,b)将a数组的内容原样复制给b数组3. reverse_copy (a, a+le

24、n, b)将a数组的内容反转后复制给b数组; 假定a,b是两个数组名,其长度为len操作示例:reverse_copy (a, a+len, b)4,sort(a,a+len)将数组a中的元素按升序排序5,sort(a, a+len, greater()将数组a中的元素按降序排序6,find(a,a+len,value)在数组a中查找值为value的元素,并返回位置指针假定a,b是两个数组名,其长度为len. 操作示例: find(a,a+len,4)7,输出数组中的内容Copy(a,a+len, Ostream_iterator (cout,”字符串”))Ostream_iterator表示

25、输出流 操作符:表示要输出的数组类型Cout表示流输出操作; “字符串”:表示分隔字符串28例例 1-6 数组升幂排序数组升幂排序 、复制、输出、复制、输出#include #include using namespace std;void main ( ) double a =1.1, 4.4, 3.3, 2.2, b4; copy(a,a+4,ostream_iterator(cout, ); reverse_copy(a,a+4,ostream_iterator(cout, ); copy(a,a+4,b); copy(b,b+4,ostream_iterator(cout, ); sort(a,a+4); copy(a,a+4,ostream_iterator(cout, ); reverse_copy(a,a+4,b); copy(b,b+4,ostream_iterator(cout, );/p27-4#include #include #include using namespace std;void main ( ) int a =1, 2, 3, 4,5,6,7,8, b8;CoutFind (a,a+8,4); copy(a,a+8,b);reverse(a,

温馨提示

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

评论

0/150

提交评论