版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、参考:参考:C+C+程序设计教程程序设计教程 p106p110p106p110第六讲第六讲 类和对象(类和对象(5)C+C+对象数组对象及对象成员与指针q指向对象的指针qthis指针q对象的const指针对象引用及对象的常引用对象作为函数参数C+C+回忆我们曾经学过的数组int iarr3;struct student sarr3;int *p3;int (*p)3)5;void (*p5)( int x,int y );类型相同的变量的集合C+C+1 1、概念:、概念:如果数组元素都为类类型,我们把这样的数组成为对象数组string arr9;C+C+2 2、声明:、声明:类名 数组名元素个
2、数;类名 数组名行数列数;new 类名元素个数;new 类名行数列数;多维数组的格式与此类似C+C+3 3、初始化:、初始化:回忆内置类型数组的初始化方式方式例例栈区栈区全局区全局区全部int a3 = 1,2,3 ;部分int a3 = 1,2 ;省略长度int a = 1,2,3 ;堆区堆区int *p = new int3;delete p;int *p = new int3();/delete p;DEMO 9_0DEMO 9_0C+C+对象数组的初始化方式方式例例栈区栈区全局区全局区全部Point arr2= Point(1,1),Point(2,2) ;部分Point arr2 =
3、 Point(1,1) ;省略长度Point arr = Point(1,1),Point(2,2);默认Point arr3;堆区堆区point *p = new Point2;C+C+ 注意注意 堆对象数组不能显示初始化Point *p = new Point3(Point(1,2),Point(2,2);一个数组元素就是一个对象,数组元素引用成员的方法与对象相同cout getX() : getY();cout (*p).getX() : (*p).getY(); cout arr0.getX() : 成员法三、法三、(对象数组名+下标)-成员 ( *(对象数组名+下标) ).成员 对象
4、数组名下标.成员C+C+9_1. .class Pointpublic: Point( double aX = 0, double aY = 0 ); Point(); double GetX(); double GetY();private: double m_dX; double m_dY;double Point:GetX() return m_dX; double Point:GetY() return m_dY; Point:Point( double aX,double aY ) m_iX = aX; m_iY = aY; cout Executing Constructor. e
5、ndl;Point:Point() cout Executing Destructor. endl;int main() Point array3 = Point(3,4),Point(5,8) ; Point *p = array; for(; parray+3; p+) cout ( GetX() , (*p).GetY() ) getX(); /常指针只能引用常成员函数常指针只能引用常成员函数 /指向常量的指针指向常量的指针Point * const KKp2 = &obj; Point * const KKp1 = &Kobj; /ErrorDEMO 9_12声明:声明
6、:与内置类型的const指针规则同C+C+对象数组对象及对象成员与指针q指向对象的指针q对象的const指针qthis指针对象引用及对象的常引用对象作为函数参数C+C+每个对象中的数据成员都分别占有存储空间,如果对同一个类定义了N个对象,则有N组同样大小的空间以存放N个对象中的数据成员,但是不同的对象都调用同一个函数代码段。那么,当不同对象的成员函数引用成员员时,怎么能保证引用的是指定对象的数据成员呢?为了确定究竟是哪个对象在引用当前成员函数,C+引入了this指针问题的产生:问题的产生:C+C+什么是什么是this指针:指针:指向当前对象的指针变量,每个成员函数都含有一个指向本类对象的thi
7、s指针。DEMO 9_2C+C+对象在内存中分配空间的顺序为:先定义的对象占高字节,后定义的对象占低字节C+C+注意:注意:引用成员函数时,在成员函数的参数表中会自动添加一个该对象的指针a1.Print( &a1 );系统会为每个一成员函数自动添加一个this指针void A:Print( A *this ) this指针不能显示的定义,我们只能使用它,通常如果希望成员函数返回本类对象或者本对象地址时显示的使用this指针this指针主要用于运算符重载 DEMO stringC+C+如果成员函数返回本类对象的引用或指针则访问成员的方式有些特殊class Atestpublic: Ate
8、st &print1( ) cout print1 endl; return *this; Atest *print2( ) cout print2 print1( ); system(PAUSE); return 0;9_3C+C+对象数组对象及对象成员与指针q指向对象的指针qthis指针对象引用及对象的常引用对象作为函数参数C+C+int ival = 3;int &rival = ival;const int &Kival = ival;const int kival = 3;int &rival = kival; /ERRORconst int &
9、;Kival = kival;const int &Kival = 3;1、回忆内置类型的引用const引用可以指向字面值常量C+C+2、对象的引用:与内置类型引用语法规则类似class Testpublic: Test(int arg = 0) m_iVal = arg; int get() return m_iVal private: int m_iVal;int main() Test obj; Test &ref = obj; /对象引用对象引用 const Test &kref = obj; cout kref.get();/Error const Test
10、kobj; Test &ref = kobj;/Error const Test &r = kobj; const Test *p = &kobj; return 0;常对象、常指针、常引用、只能引用常成员常对象只能被指向常量的指针或常引用指向C+C+. .Point p1(10,20),p2(30,40);Point &r = p1;void f() cout p1= ( p1.GetX() , p1.GetY() ); cout p2= ( p2.GetX() , p2.GetY() ); cout r= ( r.GetX() , r.GetY() ) en
11、dl;int main() cout original p1,p2,pr endl; f(); r = p2; cout after pr=p2, p1,p2,pr: endl; f(); r = Point(100,200); cout after pr=Point(100,200), p1,p2,pr: endl; f(); return 0;9_4C+C+C+C+对象数组对象及对象成员与指针对象引用及对象的常引用对象与函数参数q对象作函数参数q对象指针作函数参数q对象引用做函数参数C+C+void s ax, int ay) int temp=0; temp = ax; ax = ay;
12、 ay = temp;int main() int ival1 = 3,ival2 = 5; s); return 0;1、变量作为函数参数l形参开辟内存单元,值传递35axayival1ival2C+C+void s arg1,Point arg2) Point temp=0; temp = arg1; arg1 = arg2; arg2 = temp;int main() Point obj1(1,1),obj2(2,2); s, obj2); return 0;2、对象作为函数参数形参开辟内存单元,值传递调用拷贝构造函数arg1obj1obj2arg2特点:值传递,开销大C+C+DEMO
13、 9_8C+C+对象数组对象及对象成员与指针对象引用及对象的常引用对象与函数参数q对象作函数参数q对象指针作函数参数q对象引用做函数参数C+C+void s *p1, int*p2) int temp = 0; temp = *p1; *p1 = *p2; *p2 = temp;int main() int ival1 = 3,ival2 = 5; s, &ival2); return 0;1、回忆指针变量作为函数参数p1p2&ival1&ival2ival1ival2传递变量地址形参开辟内存单元,值传递C+C+2、对象指针作为函数参数p1p2&obj1&
14、;obj2obj1obj2传递对象地址形参开辟内存单元,值传递不会调用拷贝构造函数void s *p1, Point *p2) Test temp; temp = *p1; *p1 = *p2; *p2 = temp;int main() Point obj1(3),obj2(5); s, &obj2); return 0;C+C+DEMO 9_9C+C+对象数组对象及对象成员与指针对象引用及对象的常引用对象与函数参数q对象作函数参数q对象指针作函数参数q对象引用做函数参数C+C+void s &r1, int &r2) int temp; temp = r1; r1 = r2; r2 = temp;int main() int ival1(3),ival2(5); s, ival2); return 0;35r1r2obj1obj21、回忆变量引用作为函数参数形参不开辟内存,址传递C+C+2、对象引用作为函数参数形参不开辟内存,址传递不会
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/TS 15143-4:2025 EN Earth-moving machinery and mobile road construction machinery - Worksite data exchange - Part 4: Worksite topographical data
- 寒假安全教育主题班会方案8篇
- 形势任务教育心得体会
- 开学典礼副校长讲话稿15篇
- 招商引资差旅费管理办法
- 中国分布式光纤传感器行业发展现状及市场前景分析预测报告
- 湖南省溆浦一中普通高中学业水平考试模拟试卷语文试题(含答案)
- Massive MIMO系统低复杂度混合预编码方法研究
- 2025版销售经理多元化市场拓展聘用合同模板3篇
- 志愿培训教材
- 《openEuler操作系统》考试复习题库(含答案)
- 北师大版五年级上册数学期末测试卷及答案共5套
- 2024-2025学年人教版生物八年级上册期末综合测试卷
- 2025年九省联考新高考 语文试卷(含答案解析)
- 全过程工程咨询投标方案(技术方案)
- 心理健康教育学情分析报告
- 安宫牛黄丸的培训
- 妇科肿瘤护理新进展Ppt
- 高三(10)班下学期家长会
- 中国酒文化 酒文化介绍 酒的礼俗 中国风PPT模板
- 山西省原平市高铝土实业有限公司铝土矿资源开发利用、地质环境保护与土地复垦方案
评论
0/150
提交评论