c++学习-第3章 类和对象的进一步讨论_第1页
c++学习-第3章 类和对象的进一步讨论_第2页
c++学习-第3章 类和对象的进一步讨论_第3页
c++学习-第3章 类和对象的进一步讨论_第4页
c++学习-第3章 类和对象的进一步讨论_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第 3 章 类和对象(二),C+程序设计,2,本节主要内容,1.3.6 有默认参数的函数1.3.4 函数的重载3.1 构造函数3.2 析构函数3.5.3 对象指针3.7 动态存储与释放,3,1.3.6 带缺省参数的函数,如果在函数说明或函数定义中为形参指定一个缺省值,则称此函数为带缺省参数的函数。当函数调用发生后,在形参表中等号后的各“缺省值”将起实参的传递作用。,如有函数声明:float area(float r=6.5);,使用默认值时,调用为:area( ); /默认r=6.5,不使用默认值时,调用为:area(7.5); /r=7.5,4,1.3.4 函数重载(overload),在C语言中,不允许同名函数存在。但在C+中,允许为两个或两个以上的函数取相同的函数名,但是形参的个数或者形参的类型不应相同,编译系统会根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是所谓的函数重载。,5,【例】函数重载举例。,#include using namespace std;int max(int a,int b,int c) /max有三个参数 if(ba) a=b; if(ca)a=c; return a; int max(int a,int b) /max有两个参数 if(ba) return a; void main() int a=10,b=7,c=-2; cout max(a,b) endl; cout max(a,b,c) numnamesex;,9,3.1 构造函数,一、对象的初始化,建立对象时需要对其基本属性初始化! 对象属性的初始化就是对其所属类的数据成员初始化。 数据成员的初始化不能在类定义时进行。 类是一种抽象类型,对象才是具体实体。 上例修改后利用成员函数对对象进行初始化。,/main. cpp#include#include “student. h”int main() Student stud; stud. SetData( ); stud. Display( ); return 0;,还有更好的符合人们思维的初始化方法!,10,3.1 构造函数,二、构造函数的作用,构造函数是专门用来处理对象初始化的。 构造函数是一种特殊的成员函数。 构造函数的名字必须与类名相同; 构造函数是系统自动调用的,且仅执行一次; public,无返回值,无需定义返回类型; 形式:内置函数、重载函数、带默认形参值的函数。,11,3.1 构造函数,二、构造函数的作用,/student. h (构造函数)class Student public: Student( ) num = 0; name = “Mary ”; sex = F; .,/main. cpp#include#include “student. h”int main() Student stud; stud. Display( ); return 0;,演示结果,12,无参数的构造函数(系统默认构造函数) 带参数的构造函数 多构造函数重载 参数有缺省值的构造函数(建议少用),3.1 构造函数,三、构造函数的几种形式,如果用户没有定义构造函数,系统会自动生成一个构造函数,其函数体为空,不执行初始化操作;,13,3.1 构造函数,三、构造函数的形式(1)无参数的,/student. h (构造函数)class Student public: Student( ) num = 0; name = “Mary ”; sex = F; .,/main. cpp#include#include “student. h”int main() Student stud;/不能带( ) stud. Display( ); return 0;,14,一般格式:函数名(类型1 形参1,类型2 形参2,);实参只能在定义对象时给出,定义对象的一般格式:类名 对象名(实参1,实参2,);例:有两个时钟,初始时间分别为:(1)12:30:00;(2)5:00:00。则分别建立对象并显示其时间。,三、构造函数的形式(2)带参数的,15,#include using namespace std;class Clock /类定义 public: /构造函数声明 Clock (int NewH, int NewM, int NewS); void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour, Minute, Second;,三、构造函数的形式(2)带参数的,16,/构造函数的实现Clock:Clock(int NewH, int NewM, int NewS)Hour = NewH;Minute = NewM;Second = NewS;/-void main() /建立对象时构造函数的作用 Clock c1(12, 30, 30); /隐含调用构造函数 c1.ShowTime(); Clock c2(5, 0, 0); /隐含调用构造函数 c2.ShowTime();,31,17,一个类可以定义多个构造函数,使用户选用不同的方式完成对象数据的初始化; 重载的所有构造函数同名,但其参数类型、参数个数必须有所区别。,三、构造函数的形式(3)重载,18,三、构造函数的形式(3)重载,class CArea public: CArea( )x=0; y=0; /无参数的构造函数 CArea (int rx, int ry=0); /带缺省参数值的构造函数 CArea(float rr) rr=0; /带1个参数的构造函数 CArea(float rr, char *ra); /带2个参数的构造函数 ;,19,#include using namespace std;class Box public: Box(int h=0, int w=0, int len=0);int volume(); private:int height;int width;int length; ;,三、构造函数的形式(4)带缺省参数值的,20,使用默认参数的构造函数注意:,如果全部参数都指定了默认值,则在定义对象时可以不给出,或给出部分实参; 使用默认参数相当于多个重载的构造函数; 应该在声明构造函数时而不是在定义构造函数时指定参数的默认值,; 在一个类中定义了全部默认参数的构造函数后,不能再定义重载构造函数,否则会出现二义性。,21,使用默认参数的构造函数注意:,Box(int =10,int =10,int =10); /指定全部参数为默认参数Box( ); /声明无参构造函数,是重载构造函数Box(int,int); /声明有2个参数的构造函数若有以下语句:Box box1; /无法确定调用第1个、还是第2个构造函数?Box box2(15, 30); /无法确定调用第1个、还是第3个构造函数?,22,3.2 析构函数,完成对象被删除前的一些清理工作。没有任何函数参数,也没有返回类型说明;在对象的生存期结束的时刻,系统自动调用它,然后再释放此对象所属的空间。一个类只能有一个析构函数,不能重载。如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。,23,3.2 析构函数,/student. h (析造函数)class Student public: Student( ); Student( ) ; .,2010-8-31(2),24,实验内容,第3章习题 第2、3题;第1章习题 第2、3题,25,3.5.3 this指针,每个对象的数据成员分别独立存储,但同类的对象共享函数成员的代码段。,26,3.5.3 this指针,在每个类的成员函数中隐含特殊指针:this。明确指出成员函数当前所操作的数据所属的对象。当通过一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对对象的数据成员进行操作时,就隐含使用了this指针。,27,3.5.2 this指针,int Box:volume() return( height * width * length); ,int Box:volume() return(this-height * this-width * this-length); ,28,3.7 对象的动态建立与释放,new: 动态分配存储空间(malloc), delete:动态释放存储空间(free)。new自动计算分配存储空间的类型和大小;自动返回正确的指针类型,不必对返回指针进行强制类型转换;new可以为普通变量、类对象、数组类型的对象申请存储空间;Delete只能删除由new分配的有效指针。,29,3.7 对象的动态建立与释放,int main() Box box1(12,25,30); coutvolume()endl; delete pt; return 0; ,30,构造函数对对象初始化;构造函数与类同名,可以接受参数,允许重载。构造函数不能显式调用;析构函数执行与构造函数相反的操作,完成某些清理内存的任务,例如释放对象占用的内存空间;成员函数的this指针指明当前数据的主人;new申请存储空间,delete释放用new申

温馨提示

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

评论

0/150

提交评论