版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计内蒙古工业大学1数组 数组的声明与使用 数组:具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。 同一数组的各元素具有相同的类型 数组可以由除void以外的任何一种类型构成第1页,共56页。面向对象程序设计内蒙古工业大学2数组 数组的声明 格式eg: int a10;10个元素,a0,a1a 数据类型 数组名 常量表达式 1 常量表达式2 . . .整型、浮点型、自定义类型数组名:常量,代表数组元素在内存中的起始地址unsigned int限定数组元素个数9?eg:int a53;有 个元素,a00,a01a ?15?43第2页,共56页。面向对象程序
2、设计内蒙古工业大学3数组 数组的引用引用数组元素:可以出现在简单变量能出现的任何地方,如,赋值、输入、输出、基本运算格式:数组名下标1 下标2整常数整型变量整型表达式整型数组元素值为整数的函数score2scoreiscore2+iscorenum 2scoremax(i,j)int an;下标取值范围为: 0n-1第3页,共56页。面向对象程序设计内蒙古工业大学4数组 数组的存储 一维数组元素在内存中顺序、连续存储 数组元素在内存中占据一组连续的存储单元 逻辑上相邻的元素在物理地址上也是相邻的 数组名是数组首元素的内存首地址为数组a分配的连续的存储单元a0a1a2数组在内存的首地址:a 或
3、?eg:int a3数组元素为:a0、a1、a2第4页,共56页。面向对象程序设计内蒙古工业大学5数组数组的存储 二维数组元素在内存按行存放 相当于一个两行三列的矩阵 先放第一行,再放第二行 每行元素按列下标由小到大顺次存放eg:int a23数组元素为:a00、a01、a02、a10、a11、a12a00a01a02a10a12a11第5页,共56页。面向对象程序设计内蒙古工业大学6数组 数组的初始化 初始化:声明数组时给全部或部分数组元素赋初值 基本类型数组:给数组元素赋值 对象数组:调用构造函数1、在定义数组时对数组中的全部元素赋初值eg:int a5=1,2,3,7,6; 2、给数组的
4、前几个元素赋初值,其余元素自动初始化为0eg:int b5=1,2,3; = int b5=1,2,3,0,03、定义数组时不指定数组的长度,而用花括号中的初值个数决定数组长度eg:int a=1,2,3,7,6; = int a5=1,2,3,7,6;第6页,共56页。面向对象程序设计内蒙古工业大学7数组 实例分析#include using namespace std;void main()int A5,B5;for( )Ai=i*2-1;B5-i-1=Ai;for( )coutAi =Ai;cout Bi= Biendl;1、分析程序的运行结果2、填空int i=0;i5;i+int i
5、=0;i5;i+第7页,共56页。面向对象程序设计内蒙古工业大学8数组 数组作为函数参数 函数的参数传递方式 值传递:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元; “单向”传递 地址传递:函数调用时,将数据的存储地址作为参数传递给形参特点:形参与实参占用同样的存储单元; “双向”传递第8页,共56页。面向对象程序设计内蒙古工业大学9数组 数组作为函数参数 数组元素和数组名都可作为函数的参数 数组元素做实参:值传递 数组名做实参:地址传递实参和形参都应该是数组名形参数组和实参数组的首地址重合第9页,共
6、56页。面向对象程序设计内蒙古工业大学10数组 实例分析一#include using namespace std;double avrg( )double x=0.0;for(int i=0;in;i+)x+=ai;return x/n;void main()int a3=2,7,10,b5=3,12,5,6,8;coutavrg(3,a), avrg(5,b)endl;1、分析程序的运行结果2、填空int n,int a第10页,共56页。面向对象程序设计内蒙古工业大学11数组 实例分析二#include using namespace std;void RowSum(int A4, in
7、t nrow)for (int i=0; inrow; i+)for(int j=1; j4; j+)Ai0+=Aij; void main( )int Table34 = 1,2,3,4,2,3,4,5,3,4,5,6;for (int i=0; i3; i+)for (int j=0; j4; j+) coutTableij ;coutendl;RowSum( );for ( i = 0; i 3; i+)coutsum of row i:Tablei0endl;1、分析程序的运行结果2、填空Table,3第11页,共56页。面向对象程序设计内蒙古工业大学12数组 对象数组 数组元素是同一
8、个类的对象的数组 声明 类名 数组名下标表达式 eg: Date dates7; 引用 数组名下标.成员名 eg: dates2.year; 初始化 调用构造函数对每个元素初始化1、如声明数组时,给每个元素初值,则调用形参类型匹配的构造函数Date d2=Date(2010,10,11),Date(2010,9,20)2、如果声明数组时,没指定初始值,则调用默认构造函数Date d2=Date(2010,10,11)第12页,共56页。面向对象程序设计内蒙古工业大学13数组 实例分析class Datepublic:Date()year=month=day=0;Date(int y,int m
9、,int d) year=y; month=m; day=d; void print()coutyear=year month=month day=dayendl;private:int year,month,day;void main()Date d5=Date(2010,10,1),Date(2010,10,2),Date(2010,10,3);d3=Date(2010,10,4);d4=Date(2010,10,5);for(int i=0;i5;i+)di.print();1、分析程序的运行结果2、修改后分析第13页,共56页。面向对象程序设计内蒙古工业大学14指针 内存的地址 内存中
10、存储单元的编号 存储器中的一个字节称为一个存储单元 每个存储单元都有一个唯一的地址 计算机中所有的数据都是存放在内存单元中的 变量的地址 如定义了变量,编译时为该变量分配内存单元 变量所占用内存空间的第一个字节的地址第14页,共56页。面向对象程序设计内蒙古工业大学15指针 数据在内存中的存储、读取过程例如:整型变量 i , j , k ; 在编译时为变量分配内存,内存示意图如图所示 假设变量 i,j,k 被分配的内存地址分别为2000,2002,2004 给变量赋值为 i=3; j=6; k=9; 直接访问:直接存取变量所占内存单元的内容内存中用户数据区2000200220043010内存地
11、址编号ijk。369如果读取变量 i的值,直接到为变量i分配的存储单元(2000、2001字节)中取出i的值(3)即可间接访问:首先取出存放该变量的内存单元的地址,然后再从该地址中取出相应内容先将变量 i 的地址存放在另一个变量p中,如果读取变量 i的值,先找到变量p,从p中取出内容(2000,即变量i的起始地址),然后到2000、2001字节中取出i的值(3)2000变量P第15页,共56页。面向对象程序设计内蒙古工业大学16指针 指针变量的声明 变量的指针变量的地址 指针变量:存放另一变量地址的变量 指针变量的值是内存地址 声明 数据类型 *指针名 *表示这里声明的是指针类型的变量 数据类
12、型可以是任意类型,所指向对象的类型 指针本身的值默认类型是unsigned long integ : int * pointer;第16页,共56页。面向对象程序设计内蒙古工业大学17指针 与地址相关的运算符“ *”和“&” &地址运算符:例:int var; 则&var 表示变量var在内存中的起始地址引用例:int &var; *指针标识符:例:int a=1,*ip; 指针运算符:*ip=a; 则*ip表示指针所指向变量a的值。第17页,共56页。面向对象程序设计内蒙古工业大学18指针 指针的赋值 指针必须先赋值后引用 声明指针的同时进行初始化赋值 数据类型 *指针名=初始地址;int
13、i;int *p=&i; 声明之后,单独使用赋值语句 指针名=地址;int i,*p;p=&i;例:6_5第18页,共56页。面向对象程序设计内蒙古工业大学19指针 指针的赋值 可以声明指向常量的指针,不能通过指针改变所指对象的值,但指针本身可改变,可指向另外的对象。 可以声明指针类型的常量,这时指针本身的值不能改变。 指针的值只能赋给相同类型的指针,但void类型的指针可存储任何类型的对象地址。int a=3,b=5;const int *p=&a;p=&b;*p=8;Xint a=3,b=5;int *const p2=&a;p2=&b;Xvoid *pv;int *pint,i=9;pv
14、=&i;pint=(int *)pv;第19页,共56页。面向对象程序设计内蒙古工业大学20指针 指针的运算 算术运算 指针与整数的加减运算 指针相减运算 指针加1和减1运算p+(-)nn:相对于指针所指当前位置的位移量含义:使指针指向当前所指位置前面或后面第n个数据的位置实际内存地址值:(p)+/-n*sizeof(指针数据类型)如果p,q指向同一数组成员,则p-q表示两者之间元素个数指针加1:指向后一个数据的位置指针减1:指向前一个数据的位置第20页,共56页。面向对象程序设计内蒙古工业大学21指针 指针的运算 关系运算,=,=,!=例如p和q是相同类型的指针变量pq:若为真,则p所指目标
15、变量在q所指目标变量之前 若为假,则p所指目标变量在q所指目标变量之后第21页,共56页。面向对象程序设计内蒙古工业大学22指针 用指针处理数组元素声明与赋值 例: int a10, *pa; pa=&a0; 或 pa=a;通过指针引用数组元素 *pa就是a0,*(pa+1)就是a1,. ,*(pa+i)就是ai。 ai, *(pa+i), *(a+i), pai都是等效的。 不能写 a+,因为a是数组首地址是常量。第22页,共56页。面向对象程序设计内蒙古工业大学23指针 用指针处理数组元素 例:设有一个int型数组a,有10个元素,用三种方法输出各元素。 方法一:使用数组名和下标ai 方法
16、二:使用数组名和指针运算*a+i 方法三:使用指针变量*p见例6_7第23页,共56页。面向对象程序设计内蒙古工业大学24指针 指针数组 数组的每个元素都是指针变量 数组元素都必须是同一类型的指针 声明 类型 *数组名下标表达式int *p3由p0,p1,p2三个指针组成第24页,共56页。面向对象程序设计内蒙古工业大学25指针 指针数组例:用指针数组存放单位矩阵#include using namespace std;void main()int line1=1,0,0; int line2=0,1,0; int line3=0,0,1; int *p_line3;p_line0=line1
17、;p_line1=line2;p_line2=line3;/输出单位矩阵 coutMatrix test:endl;for(int i=0;i3;i+) for(int j=0;j3;j+) coutp_lineij ; coutendl;第25页,共56页。面向对象程序设计内蒙古工业大学26指针 用指针作为函数参数使实参与形参指针指向共同的内存空间减少函数调用时数据传递的开销例:读入三个浮点数,将整数部分和小数部分分别输出方法一:用指针做函数的形参(例6_10)方法二:用引用做函数的形参(例6_10_1)第26页,共56页。面向对象程序设计内蒙古工业大学27指针 用指针作为函数参数方法一:用
18、指针做函数的形参#include using namespace std;/指针做为函数的形参void splitfloat( )*intpart = int(x);*fracpart = x-*intpart;方法二:用引用做函数的形参float x, int *intpart, float *fracpartfloat x, int &intpart, float &fracpartintpart = int(x);fracpart = x-intpart;第27页,共56页。面向对象程序设计内蒙古工业大学28指针 用指针作为函数参数void main()float x,f;int n;c
19、outenter 3 float number:endl;for(int i=0;ix;splitfloat( x, &n, &f );coutinteger=n,fraction=f成员名例如:Point *p,p1; p=&p1; p-getx() 相当于 (*p).getx();第31页,共56页。面向对象程序设计内蒙古工业大学32指针 对象指针对象指针举例int main() Point A(5,10); Point *ptr; ptr=&A; coutGetX()endl; coutA.GetX()*类成员指针名第35页,共56页。面向对象程序设计内蒙古工业大学36指针 对象指针 指
20、向类的非静态成员的指针 指向成员函数的指针赋值指针名=&类名:函数成员名引用(对象名.* 类成员指针名)(参数表)或: (对象指针名*类成员指针名)(参数表)eg6_1第36页,共56页。面向对象程序设计内蒙古工业大学37指针 对象指针访问对象的公有成员函数的不同方式void main()/主函数Point A(4,5);/声明对象APoint *p1=&A;/声明对象指针并初始化 int (Point:*p_GetX)()=Point:GetX; /声明成员函数指针并初始化 coutA.GetX()endl; /使用对象名访问成员函数coutGetX)()endl; /使用对象指针访问成员函
21、数 cout(A.*p_GetX)()endl; /使用成员函数指针访问成员函数 第37页,共56页。面向对象程序设计内蒙古工业大学38指针 对象指针 指向类的静态成员的指针对类的静态成员的访问不依赖于对象可以用普通的指针来指向和访问静态成员例6-14(P184)通过指针访问类的静态数据成员例6-15(P185)通过指针访问类的静态成员函数第38页,共56页。面向对象程序设计内蒙古工业大学39动态内存分配 动态内存分配技术在程序运行中按照实际需要申请适量内存 使用结束后可以释放 存储和释放的存储单元称为堆对象 申请-建立 释放-删除第39页,共56页。面向对象程序设计内蒙古工业大学40动态内存
22、分配 new运算和delete运算 new:动态分配内存 new 类型T (初值列表); 功能:在程序执行期间,申请用于存放T类型对象的内存空间,并依初值列表赋以初值。 结果值:成功:T类型的指针,指向新分配的内存的首地址。失败:0(NULL)第40页,共56页。面向对象程序设计内蒙古工业大学41动态内存分配 new运算和delete运算 delete:删除由new建立的对象,释放指针所指向的内存空间 delete 指针p;功能:释放指针P所指向的内存。P必须是new操作的返回值。注意:用new建立的对象,只能使用delete进行一次删除操作。动态创建对象:6_16第41页,共56页。面向对象
23、程序设计内蒙古工业大学42动态内存分配 动态创建对象数组 使用运算符new可以创建数组类型的对象 语法: new 类型名T下标表达式; 动态为数组分配内存时不能指定数组元素的初值 如果用new建立的数组,用delete删除时在指针名前加“” delete 指针名动态创建对象数组例6_17第42页,共56页。面向对象程序设计内蒙古工业大学43动态内存分配 动态内存分配与释放函数动态存储分配函数 原型: void *malloc( size ); 参数size:欲分配的字节数 返回值:成功,则返回void型指针。失败,则返回空指针。 头文件: 和 或和第43页,共56页。面向对象程序设计内蒙古工业
24、大学44动态内存分配 动态内存分配与释放函数动态内存释放函数原型: void free( void *memblock );参数memblock: 指针,指向需释放的内存。头文件: 和 或和第44页,共56页。面向对象程序设计内蒙古工业大学45字符串 字符串常量 一对双引号括起来的字符序列,例如:china“ 按串中字符的排列次序顺序存放 每个字符占一个字节,末尾以0作为结尾标记 存储和处理字符串数据 字符数组 string类第45页,共56页。面向对象程序设计内蒙古工业大学46字符串 用字符数组存储和处理字符串 字符数组 数组元素是char型的数组 一维数组存放一个字符串 多维数组存放多个字
25、符串char s14=a,b,c,d;char s25=a,b,c,d,0;char s25=abcd;char s25=abcde;char s2=abcde; char ss34=a,b,c,0,m,n,p,0,x,y,z,0;char ss34=abc,mnp,xyz;char ss4=abc,mnp,xyz;X第46页,共56页。面向对象程序设计内蒙古工业大学47字符串 用字符数组存储和处理字符串 用字符数组存放字符串 输入和输出逐个输入、输出整个字符串一次输入或输出 注意输出字符不包括 0输出字符串时,输出项是字符数组名,输出时遇到0结束。输入多个字符串时,以空格分隔;输入单个字符串
26、时其中 不能有空格。char c =china;for(int i=0;i5;i+)coutci;coutstr1str2str3; 运行时输入数据: How are you?内存中变量状态如下: str1: H o w 0 str2: a r e 0 str3: y o u ? 0第48页,共56页。面向对象程序设计内蒙古工业大学49字符串 用字符数组存储和处理字符串用字符数组存放字符串若改为: static char str13; cinstr; 运行时输入数据: How are you?内存中变量 str 内容如下: str: H o w 0 第49页,共56页。面向对象程序设计内蒙古工
27、业大学50字符串 用字符数组存储和处理字符串用字符数组存放字符串字符串处理函数strcat(连接)strcpy (复制)strcmp (比较)strlen (求长度)strlwr (转换为小写)strupr (转换为大写) 包含头文件cstring第50页,共56页。面向对象程序设计内蒙古工业大学51字符串 string类 提供了对字符串进行处理所需要的操作 需包含头文件string 封装了串的属性及访问属性的服务查找、分配、连接、追加 声明: string 字符串变量名;第51页,共56页。面向对象程序设计内蒙古工业大学52字符串 string类 构造函数原型string();/建立一个长度
28、为0的串string(const string &s);/拷贝初始化构造函数string(const char *s);/用指针s所指向的字符串初始化string类对象string(const string &s,unsigned int pos,unsigned int n);/将对象s中的串从位置pos开始取n个字符,用来初始化string类对象string(const char *s,unsigned int n);/用指针s所指向的字符串中的前n个字符初始化string类对象string(unsigned int n,char c);/将参数c中的字符重复n次,用来初始化string类的对象第52页,共56页。面向对象程序设计内蒙古工业大学53字符串 string类 常用成员函数string append(const char *s);/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度消防设备定期检查与保养及应急预案合同
- 2025年度烟酒企业品牌战略规划与实施合同
- 2025年度特色酒吧连锁加盟经营合同
- 2025年度茶楼茶叶品牌授权使用合同
- 2025年度专业辅导班家长学生权益保障合同
- 2025年度手车品牌推广与市场拓展合同
- 土木工程施工项目成本控制考核试卷
- 2025年度智能语音识别与合成软件合同变更协议
- 2025年度新型肥料生产与销售合同范本
- 客运轮渡运输课件名称列表考核试卷
- GB/T 12914-2008纸和纸板抗张强度的测定
- GB/T 1185-2006光学零件表面疵病
- ps6000自动化系统用户操作及问题处理培训
- 家庭教养方式问卷(含评分标准)
- 城市轨道交通安全管理课件(完整版)
- 线缆包覆挤塑模设计和原理
- TSG ZF001-2006 安全阀安全技术监察规程
- 部编版二年级语文下册《蜘蛛开店》
- 锅炉升降平台管理
- 200m3╱h净化水处理站设计方案
- 个体化健康教育记录表格模板1
评论
0/150
提交评论