数组指针与字符串.ppt
《数组指针与字符串.ppt》由会员分享,可在线阅读,更多相关《数组指针与字符串.ppt(62页珍藏版)》请在三一办公上搜索。
1、第六章 数组、指针与字符串,C+语言程序设计,2,本章主要内容,数组指针动态存储分配指针与数组深拷贝与浅拷贝字符串,3,6.1.4 对象数组(P163),声明:类名 数组名元素个数;访问方法:通过下标访问 数组名下标.成员名,4,对象数组初始化,数组中每一个元素对象被创建时,系统都会调用该类的构造函数初始化该对象通过初始化列表赋值Point A2=Point(1,2),Point(3,4);如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数),5,数组元素所属类的构造函数,不声明构造函数,则采用默认构造函数各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构
2、造函数各元素对象的初值要求为不同的值时,需要声明带形参的构造函数当数组中每一个对象被删除时,系统都要调用一次析构函数,6,例:对象数组应用举例(L6_对象数组)例:利用Point类进行点的线性拟合(P165),7,指针,情形1:定义寻址一个常量的指针int number=10;const int*pn=,有效赋值,无效赋值,不能通过pn改变x的值,有效赋值,无效赋值,不能通过pn改变x的值,8,情形2:const变量地址只能赋予一个常量的指针const int number=10;const int*pn=,有效赋值,无效赋值,有效赋值,9,情形3:可以定义变量的指针常量int number=
3、10;int*const pn=,有效赋值,有效赋值,无效赋值,不能改变const指针,10,情形4:可以用限定符号声明指针常量,指向常量值const int number=10;const int*const pn=,有效赋值,无效赋值,无效赋值,不能改变const指针,11,void指针:任何类型的指针都可以赋值给void类型的指针变量经过强制类型转换,通过 void类型的指针便可以访问任何类型的数据也可以指向除类成员函数以外的函数例:P172,12,6.2.7 指针数组,类型名*数组名下标表达式;int*p10;指针数组的每个元素都是一个指针使用原则:先赋值,后引用例:P176、P177
4、,13,6.2.9 指针型函数,数据类型T*函数名(参数表)/函数体 return 数据类型T的指针;,14,6.2.10 指向函数的指针,函数指针:专门用来存入函数代码首地址的变量一旦函数指针指向了某个函数,即可使用函数指针来调用函数声明:数据类型(*函数指针名)(形参表);赋值:函数指针名=函数名;调用:函数指针名(形参);注意:该指针只能指向已经声明,且与该函数指针具有相同返回值类型和相同形参表的函数例:P180,15,6.2.11 对象指针的一般概念,对象指针是用于存放对象地址的变量声明形式类名*对象指针名;Point A(5,10);Piont*ptr;ptr=,16,对象指针应用举
5、例,#include using namespace std;void main()Point A(5,10);Point*ptr;ptr=,17,曾经出现过的错误例子,class Fred;/前向引用声明class Barney Fred x;/错误:类Fred的声明尚不完善;class Fred Barney y;,18,正确的程序,class Fred;/前向引用声明class Barney Fred*x;class Fred Barney y;,19,this指针(P182),类对象维护自己的状态变量,同一个类的对象只有一个成员函数的拷贝那么,成员函数在被调用时如何访问对象变量呢?要使
6、用特殊的指针this指针this指针隐含于每个类的成员函数中,它指向正在被成员函数操作的对象,每次调用成员函数时,这个对象的this指针就作为隐藏成员传递给成员函数,20,class Time public:Time();Time();void showTime();void setTime(int hour,int minute,int second);private:int hrs,mins,secs;void Time:showTime(void)couthrs:mins:secs endl;,21,Time aTime,bTime;生成了两个对象,每个对像有自己的内存地址仅对数据成员分
7、配内存空间而内存中所有对象只有一个showTime()之类的成员函数的一个拷贝如果对每个对象分别存储成员函数代码,则是浪费空间假设一个包含1000个Time对象的数组,如果类的每个实例都存储同一函数的代码,则要在内存中放上函数的1000个拷贝,而这些拷贝都是一样的,22,为了避免这种情形,我们只存储每个成员函数的一个拷贝,类的每个实例使用相同函数,成员函数1:showTime();成员函数2:setTime();,所有对象共享成员函数的同一拷贝,23,aTime.showTime();bTime.showTime();用对象名来保证函数使用正确的对象但仅提供对象名是不够的,函数还需要知道对象在
8、内存中的地址aTime.showTime();调用时将aTime对象地址自动传递到showTime()成员函数编译器自动生成引用对象的地址,并将这个地址作为隐藏的第一个变元传入成员函数,24,编译器对showTime()使用的形参表为 showTime(Time*this);编译器使用的实际参数调用为 showTime(例:this指针,25,注意,在一般的程序设计中,通常不直接使用this指针来引用对象成员主要在两种情形中使用要返回发送到函数的指针时return*this;多个变量同名时,使用this指针澄清所指的是哪个变量this-hour=hour;,26,说明,this指针是隐含于每一
9、个类的成员函数中的特殊指针(包括构造函数和析构函数)每次调用非静态成员函数时,自动提供this指针this指针指向各个对象,每次调用成员函数时,把这个对象的this指针作为隐藏的第一个变元传入成员函数this指针是一个常量,不能修改。,27,指向类的非静态成员的指针(P183),可以使用指针直接指向对象的成员通过指向成员的指针只能访问公有成员指向公有成员变量的指针指向公有成员函数的指针,28,指向类的非静态公有数据成员的指针,类型说明符 类名:*指针名;指针名=&类名:数据成员名;/说明指针应该指向哪个成员通过对象名(或对象指针)与成员指针结合来访问数据成员对象名.*类成员指针名对象指针名*类
10、成员指针名,29,指向类的非静态公有成员函数的指针,类型说明符(类名:*指针名)(形参表);指针名=&类名:成员函数名;通过对象名(或对象指针)与成员指针结合来访问成员函数(对象名.*类成员指针名)(参数表)(对象指针名*类成员指针名)(参数表)例:L6_非静态指针,30,指向类的静态成员的指针,对类的静态成员的访问不依赖于对象可以用普通的指针来指向和访问静态成员通过指针访问类的静态数据成员L6_静态指针1通过指针访问类的静态函数成员L6_静态指针2,31,6.3 动态内存分配(P186),动态分配是程序在运行时得到内存的手段保证程序在运行过程中按照实际需要申请适量的内存,使用结束后还可以释放
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 指针 字符串

链接地址:https://www.31ppt.com/p-5986263.html