面向对象程序设计语言C第章深入类与对象.ppt
《面向对象程序设计语言C第章深入类与对象.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计语言C第章深入类与对象.ppt(61页珍藏版)》请在三一办公上搜索。
1、面向对象程序设计语言C+,电子科技大学计算机学院,1,第四章 深入类和对象,4.1 构造函数4.1.1 构造函数的作用 class Date int day,month,year;public:void InitDate(int d,int m,int y);/初始化?;程序员有的时候会忘记了调用初始化函数 或者调用了多次。这都是不好的现象。,2,第四章 深入类和对象,4.1 构造函数4.1.1 构造函数的作用 C+为类设计了构造函数(constructor)机制,它可以达到初始化数据成员的目的。类的构造函数是类的一个特殊成员函数,它没有返回类型(void也不行),可以有参数,函数名和类名一样
2、。当创建类的一个新对象时,自动调用构造函数,完成初始化工作(需要注意构造函数是否有参数,以及参数的个数、类型)。,3,第四章 深入类和对象,4.1 构造函数4.1.1 构造函数的作用构造函数的作用为:分配一个对象的数据成员的存储空间;(该功能由系统自动完成。)(2)执行构造函数(体),一般是初始化一个对象的部分或全体数据成员。,4,第四章 深入类和对象,4.1 构造函数4.1.2 构造函数的定义1.构造函数的定义class Date private:int year,month,day;public:Date(int y,int m,int d);/其它成员;构造函数的参数可以是缺省的。,5,
3、第四章 深入类和对象,4.1 构造函数4.1.2 构造函数的定义2.构造函数的初始化方式构造函数有两种方式初始化数据成员:1)在构造函数体内用赋值语句的方式;Date:Date(int y,int m,int d)year=y;month=m;day=d;,6,第四章 深入类和对象,4.1 构造函数4.1.2 构造函数的定义2)构造函数的初始化列表的方式Date:Date(int y,int m,int d):year(y),month(m),day(d),7,第四章 深入类和对象,4.1 构造函数4.1.2 构造函数的定义3.缺省的构造函数用户定义的类类型中,可以没有构造函数。编译器会自动给
4、该类类型生成一个没有参数的构造函数,该函数不作任何初始化工作。这种构造函数称为缺省的构造函数。注意:一个类如果有显式定义的构造函数,编译器就不会生成缺省构造函数了。,8,第四章 深入类和对象,4.1 构造函数4.1.2 构造函数的定义4.定义类对象时给构造函数提供参数1)仅仅只有一个参数:类名 对象名=参数;2)有一个或多个参数:类名 对象名(参数列表);,9,第四章 深入类和对象,4.1 构造函数4.1.3 重载构造函数一个类可以提供多个构造函数,用于在不同场合进行类对象的初始化工作。构造函数的重载,它们的参数表必须互不相同。class Date int year,month,day;pub
5、lic:Date(int d,int m,int y);Date(int d,int m);Date(int d);Date();Date(const char*dateStr);,10,则下述定义对象的方式都是正确的。Date today(8,10,2008);Date day1(9,5);Date day2(8);Date Christmas(“Dec 25,2008”);Date now;,第四章 深入类和对象,4.2 析构函数与构造函数对应的是析构函数。C+通过析构函数来处理对象的善后工作。析构函数没有返回类型,没有参数,函数名是类名前加“”。析构函数的作用为:(1)执行析构函数(一般
6、没有具体的工作);(2)释放对象的存储空间。(该功能由系统自动完成。)注意:析构函数需要负责释放new申请的空间。,12,第四章 深入类和对象,4.2 析构函数 可以使用完全限定名方式显式地调用析构函数;若没有显式调用,则在一个对象的作用域结束时,系统自动调用析构函数。系统自动调用构造函数和自动调用析构函数的顺序是相反的。class Xpublic:X()X();(ex4-8.cpp),13,考虑一个数组,数组的大小在定义时初始化,而且其大小在运行时可以改变。class Array int*p;int size;public:Array(int num)size=num;p=new intsi
7、ze;Array()delete p;.;,第四章 深入类和对象,4.3 拷贝构造函数1.什么是拷贝构造函数 构造函数的参数可以是任何类型参数,甚至可以将自己类对象的(常量)引用作为参数,称它为拷贝构造函数。拷贝构造函数有两个含义:首先,它是一个构造函数,当创建一个新对象时,系统自动调用它;其次,它将一个已经定义过的对象(参数代表的对象)的数据成员逐一对应地拷贝给新对象。,15,第四章 深入类和对象,4.3 拷贝构造函数class A int x;int y;public:A(int,int);/一般构造函数 A(const A/成员函数的实现,16,void main()A obj1(10,
8、20);/调用A(int,int)A obj2(obj1);/调用A(const A,第四章 深入类和对象,4.3 拷贝构造函数1.什么是拷贝构造函数 如果一个类没有显式定义拷贝构造函数,C+编译器可以为该类产生一个缺省的拷贝构造函数。缺省的拷贝构造函数,也将拷贝对象的各个数据成员拷贝给被拷贝对象的各个数据成员。这样一来,两个对象的内存映像是一模一样的。,18,第四章 深入类和对象,4.3 拷贝构造函数2.拷贝构造函数的作用拷贝构造函数的作用是:创建一个新对象,并将一个已存在的对象拷贝到这个新对象对象本身做参数(将实参对象拷贝给形参对象)函数返回对象(拷贝返回的对象给一个临时对象)(ex4-9
9、.10.cpp),19,class string int length;char*contents;int who;public:string(int id)length=0;contents=NULL;who=id;string fun(string arg)return(arg);void main()string s=1;string t=fun(s);,第四章 深入类和对象,4.4 对象的创建、释放和初始化1.对象的创建和释放可以创建不同形式的各类对象:命名的自动对象 每次进入该对象的作用域,都调用构造函数;每次退出该对象的作用域,都调用析构函数。,21,第四章 深入类和对象,4.4
10、对象的创建、释放和初始化class Table;void f(int a)Table aa;/aa的生命期到f函数返回Table bb;/bb的生命期到f函数返回if(a0)Table cc;/cc的生命期到if语句结束 Table dd;/dd的生命期到f函数返回;/若调用函数f(10)则调用构造函数的顺序是:aa、bb、cc、dd;调用析构函数的顺序是:cc、dd、bb、aa。,22,第四章 深入类和对象,4.4 对象的创建、释放和初始化自由对象(动态对象)使用new创建对象(实际上调用构造函数),使用delete释放对象(实际上调用析构函数);当delete释放对象后,该对象就不能再被使
11、用。如果构造函数有参数,也必须给出实参。(ex4-13.cpp),23,注意,全局对象:在程序运行前,调用构造函数创建它们 整个程序结束时,调用析构函数释放它们,第四章 深入类和对象,4.4 对象的创建、释放和初始化2.对象的初始化初始化有许多表示法,C+语言允许下述三种表示方法。C风格的初始值表的方法赋值表达式的方法表达式表的方法Class_Name Object();Class_Name Object=;,25,第四章 深入类和对象,4.5 对象和指针4.5.1 this指针 C+为所有非静态成员函数提供了一个称为this的指针,因此,常常称成员函数拥有this指针。this是一个隐含的指
12、针,不能被显式声明 它只是一个形参,一个局部变量 在任何一个非静态成员函数里都存在 它局部于某一对象。this指针是一个常指针,可以表示为(但不能显式声明):X*const this;,26,第四章 深入类和对象,4.5 对象和指针4.5.1 this指针 可以使用const说明符将this声明为指向常量的常指针。在类中,一个成员函数的原型后跟一个const,该函数称为const成员函数,它的特点是该函数不能修改this所指的对象的成员。例 int GetInt()const;this 指针主要用在运算符重载、自引用等场合。(ex4-15.cpp),27,class INT int num;p
13、ublic:void set(int x)num=x;void out()coutnum;,void fun(INT obj)INT funObj;num=10;obj.num=20;funObj.num=30;out();obj.out();funObj.out();set(40);obj.set(50);funObj.set(60);out();obj.out();funObj.out();/类定义结束,void main()INT mainObj;mainObj.set(1);mainObj.out();mainObj.fun(mainObj);mainObj.out();则程序输出:1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计语言 深入
链接地址:https://www.31ppt.com/p-5674296.html