第6章类和对象(二).ppt_第1页
第6章类和对象(二).ppt_第2页
第6章类和对象(二).ppt_第3页
第6章类和对象(二).ppt_第4页
第6章类和对象(二).ppt_第5页
已阅读5页,还剩30页未读, 继续免费阅读

下载本文档

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

文档简介

1、,第6章 类和对象(二),本章内容,对象指针和对象引用 对象数组 常类型 子对象 堆对象,对象指针: 例如: class AA public: AA(int i ) a=i; void fun( ) coutfun( ); / /指针调用成员函数 ,注意: 对象指针不调用构造函数。,6.1 对象指针和对象引用作函数参数,对象指针作函数参数: 1)实现传址调用,可在被调用函数中改变调用函数的参 数对象的值。 2)使用对象指针实参仅将对象的地址值传给形参,而不 进行副本的拷贝,这样可以提高运行效率,减少时空 开销。,例2:写出下列程序的输出结果,上页程序输出结果: mp:x=3,y=9 mq:x=

2、33,y=44 mr:x=3,y=9 mp:x=3,y=9 mq:x=11,y=22 mr:x=1,y=2,this指针,this指针: this是一个隐含于每个类的成员函数中的特 殊指针。它指向当前调用成员函数的对象 (称为当前对象),当一个对象调用其成员函数时,编译程序首先将该 对象的地址赋给this指针,然后再调用成员函数。,每次成员函数存取数据成员时,隐含使用this指针,通常不显式地使用this指针来引用数据成员。 C+是靠this的当前值了解相应对象的。*this表示当前对象。,include class Test int x; public : Test( int a=0 ) x

3、=a; void Print( ); ; void Test:Print( ) coutx=”x “n (*this).x=”(*this).xendl; void main( ) Test t1(12); t1.Print( ); ,输出结果: x=12 This-x=12 (*this).x=12,this 指针例题:,6.2 对象数组,对象数组: 由对象组成的数组。 对象数组的定义: 类名 数组名元素个数 /一维数组 例: class myclass ; void main( ) myclass ob10; /对象数组定义 数组元素引用成员函数: obi.成员函数(),对象数组的初始化:

4、,#include class Date public: Date( ) year=month=day=0; Date(int y, int m, int d) year=y; month=m; day=d; void print( ) coutyearmonthdayendl; ; void main( ) Date dd5= Date(2007,2,1), Date(2007,3,1) ; dd2= Date(2007,3,15); dd3= Date(2007,3,20); dd4= Date(2007,4,1); for(int i=0; i5; i+) Datei.print( );

5、 ,指向数组的指针和指针数组: 指向数组的指针: (自学) 指针数组:由对象指针组成的数组。,程序输出结果: 5, 7 0, 0 7, 8,例 :对象指针数组的使用示例,常类型是指使用类型修饰符const说明的类型 常类型的变量或对象的值是不能被更新的 定义或说明常类型时必须进行初始化,6.3 常类型,常对象的定义形式如下: const 类名 对象名(实参表); 或者 类名 const 对象名(实参表);,一般常量的定义形式如下: const 类型 变量常量; 或者 类型 const 变量常量;,1)一般常量: const int M=100; int const N=5; double X=

6、3.14159; int const a5=10,20,30,40,50; 注意: 使用const说明后,其变量或数组元素的值不能被更新。,class A public: A(int i,int j)x = i;y = j; private: int x,y; ; const A a1(3,4); A const a2(8,19);,a1和a2都是常对象,它们不能被更新,2)常对象:,3) 常成员,类中的常类型成员称为常成员。常成员分为常数据成员和常成员函数两种。,常数据成员: 类中用const修饰的常量或常引用是常数据成员。 常数据成员只能通过构造函数的缺省参数值或初始化列表进行初始化,任何

7、其他函数都不能改变它们的值。,程序输出结果: 100:10:100 0:10:0,例 :常数据成员示例,常成员函数 使用const关键字进行说明的成员函数,称为常成员函数。 不允许在常成员函数中调用非常成员函数。只有常成员函数才有资格操作常量或常对象 常成员函数说明格式如下: () const;,程序输出结果: 5 : 4 20 ; 52,例 :常成员函数和常对象示例,6.4 子对象和堆对象,子对象:一个类的成员是另一个类的对象。 当建立本对象时,子对象自动被建立。 创建本对象时不仅要对本类的基本类型数据成员初始化,而且要对子对象进行初始化 子对象构造函数的参数由本对象构造函数提供。 构造函数

8、调用顺序:子对象 本对象 多个子对象时,按照各子对象的定义顺序调用它们各自所属类的构造函数。,本构造函数的形式是: 构造函数名(形参表):子对象名(参数) 函数体 ,#include class AA public: AA(int i, int j) a1=i; a2=j; cout“AA”endl; void print( ) couta1a2endl; AA( ) cout“AA”endl; private: int a1,a2; ; class BB public: BB(int i, int j, int k):ob(i,j) b=k; cout“BB”endl; void print

9、( ) coutb; ob.print( ); BB( ) cout“BB”endl; private: int b; AA ob; ; void main( ) BB x(2,4,6); x.print( ); ,运行结果: AA BB 6 2 4 BB AA,例题:子对象的初始化,上题输出结果: B class(a=2,b=5) A class(x=0) B class(a=3,b=9) A class(x=7) m:x=0 a=2 b=5 n:x=7 a=3 b=9,堆对象:在程序运行时动态建立的对象。 堆对象:在程序中用new建立的对象。(调构造函数) 堆对象使用delete释放。(调

10、析构函数),运算符new的使用形式: new 类型说明( 初始值) /建立变量或对象 new 类名 元素个数 /建立数组 运算符delete的使用: delete 指针名 delete 指针名,注意:使用new运算符时,返回一个指针。 (使用new运算符必须与指针结合),new运算符使用例题: 动态建立变量: 动态建立数组 动态创建对象 动态创建对象数组,动态建立变量例题: #include void main() int *p; p=new int; cout*p; cout*p+100endl; *p=123; cout*pendl; delete p; ,执行结果: 输入数据:40 14

11、0 123,动态建立数组例题: #include void main( ) int *p, n; coutn; p=new intn; for(int i=0; in; i+) pi=i*3; for(int i=0; in; i+) coutpi“ “; delete p; ,运行结果: 输入元素个数:5 0 3 6 9 12,动态创建对象例题,#include class AA public: AA(int i, int j) a=i; b=j; coutsum( ); p2-sum( ); delete p1; delete p2; ,运行结果: Constructor 10 Const

12、ructor 8 25 12 Destructor 10 Destructor 8,动态创建对象数组例题: (见教材例题),6.5 类型转换:,类型转换时将一种类型的值映射为另一种类型的值。类型转换包含有自动隐含的和强制的两种。,1. 构造函数具有类型转换功能,例如: #include class A public: A( )m = 0; A(double i)m = i; void print( )cout m endl; private: double m; ; void main( ) A a(5); a = 10; a.print( ); ,2. 构造函数具有类型转换功能,转换函数:又称为类型强制转换成员函数,它是类中的一个非 静态成员函数。 定义格式如下: operator 目的类型( ) . return 目的类型的数据; ,转换函数没有参数,也不能加函数类型说明。,程序输出结果: 5.325,例 :类型转换函数示例,其它定义类的形式,1。用关键字 struct 定义类,用struct定义类时,类体内容和格式与用class定义类完全相同它们的差别仅在于: 用struct定义类时缺省的访问权限是公有的(publ

温馨提示

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

评论

0/150

提交评论