《数组 指针和字符串.pptx》由会员分享,可在线阅读,更多相关《数组 指针和字符串.pptx(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1声明:声明:类名类名 数组名数组名元素个数元素个数;访问方法:访问方法:通过下标访问通过下标访问 数组名数组名下标下标.成员名成员名 第1页/共51页2数组中每一个元素对象被创建时,系统都会调数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。用类构造函数初始化该对象。通过初始化列表赋值。通过初始化列表赋值。例:例:Point a2=Point(1,2),Point(3,4);如果没有为数组元素指定显式初始值,数组元如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数)。素便使用默认值初始化(调用默认构造函数)。第2页/共51页3不声明构造函数,则采用
2、默认构造函数。不声明构造函数,则采用默认构造函数。各元素对象的初值要求为相同的值时,可以各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。声明具有默认形参值的构造函数。各元素对象的初值要求为不同的值时,需要各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。声明带形参的构造函数。当数组中每一个对象被删除时,系统都要调当数组中每一个对象被删除时,系统都要调用一次析构函数。用一次析构函数。第3页/共51页4/Point.h#ifndef _POINT_H#define _POINT_Hclass Pointpublic:Point();Point(int x,int y)
3、;Point();void move(int newX,int newY);int getX()const return x;int getY()const return y;private:int x,y;#endif第4页/共51页/Point.cpp#include Point.h#include using namespace std;Point:Point()x=y=0;coutDefault Constructor called.endl;Point:Point(int x,int y):x(x),y(y)coutConstructor called.endl;Point:Poin
4、t()coutDestructor called.endl;void Point:move(int newX,int newY)coutMoving the point to(newX,newY)endl;x=newX;y=newY;5第5页/共51页/6_3.cpp#include Point.h#include using namespace std;int main()coutEntering main.endl;Point a2;for(int i=0;i2;i+)ai.move(i+10,i+20);coutExiting main.成员名成员名ptr-getx()相当于相当于(*p
5、tr).getx();第10页/共51页11/6_12.cpp#include using namespace std;class Pointpublic:Point(int x=0,int y=0):x(x),y(y);int getX()const return x;int getY()const return y;private:int x,y;第11页/共51页12int main()Point a(4,5);Point*p1=&a;coutgetX()endl;couta.getX()x=xx;this-y=yy;第16页/共51页17通过指向成员的指针只能访问公有成员通过指向成员的
6、指针只能访问公有成员声明指向成员的指针声明指向成员的指针声明指向公有数据成员的指针声明指向公有数据成员的指针类型说明符类型说明符 类名类名:*指针名;指针名;声明指向公有函数成员的指针声明指向公有函数成员的指针类型说明符类型说明符 (类名类名:*指针名指针名)(参数表参数表);第17页/共51页18指向数据成员的指针指向数据成员的指针说明指针应该指向哪个成员说明指针应该指向哪个成员指针名指针名=&类名类名:数据成员名;数据成员名;通过对象名(或对象指针)与成员指针结合来访问数据成员通过对象名(或对象指针)与成员指针结合来访问数据成员对象名对象名.*类成员指针名类成员指针名或:或:对象指针名对象
7、指针名*类成员指针名类成员指针名 第18页/共51页19指向函数成员的指针指向函数成员的指针初始化初始化指针名指针名=类名类名:函数成员名;函数成员名;通过对象名(或对象指针)与成员指针结合来访问函数成员通过对象名(或对象指针)与成员指针结合来访问函数成员(对象名对象名.*类成员指针名类成员指针名)(参数表参数表)或:或:(对象指针名对象指针名*类成员指针名类成员指针名)(参数表参数表)第19页/共51页20例例6-13 访问对象的公有成员函数的不同方访问对象的公有成员函数的不同方式式int main()Point a(4,5);Point*p1=&a;int(Point:*funcPtr)(
8、)const=&Point:getX;cout(a.*funcPtr)()endl;cout*funcPtr)()endl;couta.getX()endl;coutgetX()endl;return 0;第20页/共51页21对类的静态成员的访问不依赖于对象对类的静态成员的访问不依赖于对象可以用普通的指针来指向和访问静态成员可以用普通的指针来指向和访问静态成员例例6-14通过指针访问类的静态数据成员通过指针访问类的静态数据成员例例6-15通过指针访问类的静态成员函数通过指针访问类的静态成员函数第21页/共51页22#include using namespace std;class Poin
9、tpublic:Point(int x=0,int y=0):x(x),y(y)count+;Point(const Point&p):x(p.x),y(p.y)count+;Point()count-;int getX()const return x;int getY()const return y;static int count;private:int x,y;int Point:count=0;第22页/共51页int main()int*ptr=&Point:count;Point a(4,5);coutPoint A,a.getX(),a.getY();cout Object co
10、unt=*ptrendl;Point b(a);coutPoint B,b.getX(),b.getY();cout Object count=*ptrendl;return 0;23第23页/共51页24#include using namespace std;class Pointpublic:Point(int x=0,int y=0):x(x),y(y)count+;Point(const Point&p):x(p.x),y(p.y)count+;Point()count-;int getX()const return x;int getY()const return y;static
11、 void showCount()cout Object count=countendl;private:int x,y;static int count;int Point:count=0;第24页/共51页25int main()void(*funcPtr)()=Point:showCount;Point a(4,5);coutPoint A,a.getX(),a.getY();funcPtr();Point b(a);coutPoint B,b.getX(),b.getY();funcPtr();return 0;第25页/共51页new new 类型名类型名T T(初值列表)(初值列表
12、)功能功能:在程序执行期间,申请用于存放:在程序执行期间,申请用于存放T T类型对象的内存空间,并依类型对象的内存空间,并依初值列表赋以初值。初值列表赋以初值。结果值结果值:成功:成功:T T类型的指针,指向新分配的内存。类型的指针,指向新分配的内存。失败:失败:0 0(NULLNULL)第26页/共51页deletedelete 指针指针P P功能功能:释放指针:释放指针P P所指向的内存。所指向的内存。P P必须是必须是newnew操作的返回值。操作的返回值。第27页/共51页28#include using namespace std;class Pointpublic:Point():
13、x(0),y(0)coutDefault Constructor called.endl;Point:Point(int x,int y):x(x),y(y)coutConstructor called.endl;Point()coutDestructor called.endl;void move(int newX,int newY)coutMoving the point to(newX,newY)endl;x=newX;y=newY;int getX()const return x;int getY()const return y;private:int x,y;第28页/共51页int
14、 main()coutStep one:endl;Point*ptr1=new Point;delete ptr1;coutStep two:endl;ptr1=new Point(1,2);delete ptr1;return 0;29第29页/共51页30#includeusing namespace std;class Point /类的声明同例类的声明同例6-16,略,略;int main()Point*ptr=new Point2;ptr0.move(5,10);ptr1.move(15,20);coutDeleting.endl;delete ptr;return 0;第30页/共
15、51页#include using namespace std;class Pointpublic:Point():x(0),y(0)coutDefault Constructor called.endl;Point:Point(int x,int y):x(x),y(y)coutConstructor called.endl;Point()coutDestructor called.endl;void move(int newX,int newY)coutMoving the point to(newX,newY)endl;x=newX;y=newY;int getX()const retu
16、rn x;int getY()const return y;private:int x,y;31第31页/共51页class ArrayOfPointspublic:ArrayOfPoints(int size):size(size)points=new Pointsize;ArrayOfPoints()coutDeleting.=0&indexsize);return pointsindex;private:Point*points;int size;32第32页/共51页int main()int count;coutPlease enter the count of points:cou
17、nt;ArrayOfPoints points(count);points.element(0).move(5,0);points.element(1).move(15,20);return 0;33第33页/共51页运行结果如下:运行结果如下:Please enter the number of points:2Default Constructor called.Default Constructor called.Deleting.Destructor called.Destructor called.34第34页/共51页35浅复制浅复制实现对象间数据元素的一一对应复制。实现对象间数据
18、元素的一一对应复制。深复制深复制当被复制的对象数据成员是指针类型时,不是复制该指针成员本身,当被复制的对象数据成员是指针类型时,不是复制该指针成员本身,而是将指针所指的对象进行复制。而是将指针所指的对象进行复制。第35页/共51页36#includeusing namespace std;class Point /类的声明同例类的声明同例6-16 /;class ArrayOfPoints /类的声明同例类的声明同例6-18 /;第36页/共51页int main()int count;coutPlease enter the count of points:count;ArrayOfPoin
19、ts pointsArray1(count);pointsArray1.element(0).move(5,10);pointsArray1.element(1).move(15,20);/创建对象数组pointsArray2ArrayOfPoints pointsArray2=pointsArray1;coutCopy of pointsArray1:endl;coutPoint_0 of array2:pointsArray2.element(0).getX(),pointsArray2.element(0).getY()endl;coutPoint_1 of array2:pointsA
20、rray2.element(1).getX(),pointsArray2.element(1).getY()endl;37第37页/共51页 pointsArray1.element(0).move(25,30);pointsArray1.element(1).move(35,40);coutAfter the moving of pointsArray1endl;coutPoint_0 of array2:pointsArray2.element(0).getX(),pointsArray2.element(0).getY()endl;coutPoint_1 of array2:points
21、Array2.element(1).getX(),pointsArray2.element(1).getY()endl;return 0;38第38页/共51页运行结果如下:Please enter the number of points:2Default Constructor called.Default Constructor called.Copy of pointsArray1:Point_0 of array2:5,10Point_1 of array2:15,20After the moving of pointsArray1:Point_0 of array2:25,30Po
22、int_1 of array2:35,40Deleting.Destructor called.Destructor called.Deleting.接下来程序出现异常,也就是运行错误。第39页/共51页复制前复制前复制后复制后pointsArray1的的数数组组元素占用的内存元素占用的内存pointssizepointsArray1pointssizepointsArray1pointsArray1的的 数数组元素占用的内存组元素占用的内存pointssizepointsArray2第40页/共51页41#includeusing namespace std;class Point /类的声
23、明同例类的声明同例6-16 ;class ArrayOfPoints public:ArrayOfPoints(const ArrayOfPoints&v);/其它成员同例其它成员同例6-18 ;第41页/共51页ArrayOfPoints:ArrayOfPoints(const ArrayOfPoints&v)size=v.size;points=new Pointsize;for(int i=0;isize;i+)pointsi=v.pointsi;int main()/同例同例6-20 42第42页/共51页程序的运行结果如下:程序的运行结果如下:Please enter the num
24、ber of points:2Default Constructor called.Default Constructor called.Default Constructor called.Default Constructor called.Copy of pointsArray1:Point_0 of array2:5,10Point_1 of array2:15,20After the moving of pointsArray1:Point_0 of array2:5,10Point_1 of array2:15,20Deleting.Destructor called.Destru
25、ctor called.Deleting.Destructor called.Destructor called.43第43页/共51页pointssizepointsArray1pointsArray1的的 数数组元素占用的内存组元素占用的内存pointssizepointsArray2复制前复制前pointsArray1的的数数组组元素占用的内存元素占用的内存pointssizepointsArray1复制后复制后44第44页/共51页45/6_23.cpp#include#include using namespace std;inline void test(const char*ti
26、tle,bool value)couttitle returns(value?true:false)endl;第45页/共51页int main()string s1=DEF;cout s1 is s1endl;string s2;couts2;coutlength of s2:s2.length()endl;test(s1=ABC,s1=ABC);test(DEF=s1,DEF=s1);s2+=s1;couts2=s2+s1:s2endl;coutlength of s2:s2.length()endl;return 0;46第46页/共51页47头文件头文件string中定义的函数中定义的
27、函数getline。格式格式1:getline(cin,字符串字符串s);这种用法就会把输入的整行字符赋给字符串这种用法就会把输入的整行字符赋给字符串s。格式格式2:getline(cin,字符串字符串s,分隔符分隔符);如:如:getline(cin,s,);第47页/共51页48/6_24.cpp#include#include using namespace std;int main()for(int i=0;i2;i+)string city,state;getline(cin,city,);getline(cin,state);coutCity:city State:stateendl;return 0;第48页/共51页491、用string 类型表示银行账号;2、为SavingsAccount类增加一个用来报告错误的函数error;3、主函数中创建的多个账户对象组织在数组中;4、设计一个日期类Date,用来表示日期。第49页/共51页1 1、第、第5 5章课后习题章课后习题 5-35-3、5-75-7、5-135-13、5-145-14 。写在作业本上,并及时交作业。写在作业本上,并及时交作业。50第50页/共51页感谢您的观看。第51页/共51页