《C++程序设计》课件第3章.ppt

上传人:eieieie 文档编号:21713042 上传时间:2023-11-03 格式:PPT 页数:61 大小:1.37MB
返回 下载 相关 举报
《C++程序设计》课件第3章.ppt_第1页
第1页 / 共61页
《C++程序设计》课件第3章.ppt_第2页
第2页 / 共61页
《C++程序设计》课件第3章.ppt_第3页
第3页 / 共61页
《C++程序设计》课件第3章.ppt_第4页
第4页 / 共61页
《C++程序设计》课件第3章.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《《C++程序设计》课件第3章.ppt》由会员分享,可在线阅读,更多相关《《C++程序设计》课件第3章.ppt(61页珍藏版)》请在三一文库上搜索。

1、C+程序设计第第3 3章章 类和对象类和对象第第3章章 类和对象类和对象本章学习要点本章学习要点类和对象的概念及其关系类和对象的定义及其使用构造函数与析构函数的作用及使用对象与指针对象与const对象的赋值和复制对象作为函数的参数学生信息管理系统中类和对象的实例第第3章章 类和对象类和对象本章学习目标本章学习目标正确理解类和对象以及封装的概念熟练掌握类和对象的定义及其使用理解构造函数与析构函数的作用及使用掌握对象与指针及const的特点及使用理解并掌握对象的赋值和复制理解对象作为函数的参数传递的实质掌握基本的面向对象的设计与实现3.1类的声明和对象的定义类的声明和对象的定义v面向对象的核心是对

2、象面向对象的核心是对象v系统是由一个一个对象构成的系统是由一个一个对象构成的v对象是由类实例化得到的对象是由类实例化得到的v程序员在程序设计时是针对类进行的程序员在程序设计时是针对类进行的v本节主要是关于类和对象的概念以及本节主要是关于类和对象的概念以及类的声明和对象的定义类的声明和对象的定义 3.1.1 类和对象的概念及关系类和对象的概念及关系v对象对象 封装了数据及在这些数据之上的操作的封装了数据及在这些数据之上的操作的封装体封装体 v类类 对具有相同属性和操作的一组对象的抽对具有相同属性和操作的一组对象的抽象描述象描述 v类和对象的关系类和对象的关系 类是对象的抽象;对象是对类的实例化类

3、是对象的抽象;对象是对类的实例化类和对象的关系类和对象的关系3.1.2 类类的声明的声明class 类名public:公用成员protected:受保护成员private:私有成员;声明类的一般形式:声明类的关键字合法标识符公用成员限定符受保护成员限定符私有成员限定符类结束要加分号3.1.2 类类的声明的声明【例3-1】声明一个学生类,要求包括学生的学号、姓名、性别等信息,并且能够显示学生的信息。/=class Student /声明Student类public:/以下部分为公用成员函数void Show()coutNo.:stuNoendl;coutName:stuNameendl;cout

4、Sex:stuSexendl;private:/以下部分是私有数据成员int stuNo;char stuName20;char stuSex;/类声明结束,此处必须有分号/=3.1.2 类类的声明的声明3.1.3 对象的定义对象的定义v声明类之后,再定义对象声明类之后,再定义对象 如:如:Student zhang,wang;或:或:class Student zhang,wang;v在声明类的同时定义对象在声明类的同时定义对象 如:如:class Student zhang,wang;v不出现类名,直接定义对象不出现类名,直接定义对象 如:如:class zhang,wang;声明类时系统

5、并不分配内存单元,而定义对象时系统声明类时系统并不分配内存单元,而定义对象时系统会给每个对象分配内存单元会给每个对象分配内存单元3.2.1成员函数的性质成员函数的性质v不属于任何类的函数称为普通函数不属于任何类的函数称为普通函数 v成员函数隶属于某个类成员函数隶属于某个类v成员函数与普通函数的区别成员函数与普通函数的区别 成员函数是属于某个类成员函数是属于某个类,定义在类的内部定义在类的内部 成员函数可以指定为访问属性成员函数可以指定为访问属性 成员函数可以访问本类的任何成员成员函数可以访问本类的任何成员 普通函数只能访问对象的公用成员普通函数只能访问对象的公用成员v对于成员函数,一般是将需要

6、被类外调用对于成员函数,一般是将需要被类外调用的声明为公用的,不需要被类外调用的声的声明为公用的,不需要被类外调用的声明为私有的明为私有的 3.2.1成员函数的性质成员函数的性质v不属于任何类的函数称为普通函数不属于任何类的函数称为普通函数 v成员函数隶属于某个类成员函数隶属于某个类v成员函数与普通函数的区别成员函数与普通函数的区别 成员函数是属于某个类成员函数是属于某个类,定义在类的内部定义在类的内部 成员函数可以指定为访问属性成员函数可以指定为访问属性 成员函数可以访问本类的任何成员成员函数可以访问本类的任何成员 普通函数只能访问对象的公用成员普通函数只能访问对象的公用成员v对于成员函数,

7、一般是将需要被类外调用对于成员函数,一般是将需要被类外调用的声明为公用的,不需要被类外调用的声的声明为公用的,不需要被类外调用的声明为私有的明为私有的 3.2.2在类外定义成员函数在类外定义成员函数【例3-4】将Student类的成员函数改为在类外定义的形式。/=class Student /声明Student类类型public:/以下部分为公用成员函数void Show();private:/以下部分是私有数据成员int stuNo;char stuName20;char stuSex;/类声明结束void Student:Show();/在类的声明之外定义成员函数coutNo.:stuNo

8、endl;coutName:stuNameendl;coutSex:stuSexendl;/=3.2.2在类外定义成员函数在类外定义成员函数3.2.3 inline成员函数成员函数vinline函数函数 在编译时将被调用函数的代码直接嵌入在编译时将被调用函数的代码直接嵌入到调用函数处到调用函数处 vinline成员函数就是将类中的成员函数成员函数就是将类中的成员函数声明为内置的声明为内置的 当类中的成员函数是在类内定义时,默当类中的成员函数是在类内定义时,默认该成员函数是认该成员函数是inline成员函数成员函数 如果成员函数定义在类的外部,则在成如果成员函数定义在类的外部,则在成员函数声明或

9、定义前必须要有员函数声明或定义前必须要有inline关键关键字字 3.2.4 成员函数的存储方式成员函数的存储方式v实例化对象时需要分配内存空间,数实例化对象时需要分配内存空间,数据和函数都需要存储空间据和函数都需要存储空间v同一个类的不同对象的数据是不一样同一个类的不同对象的数据是不一样的,因此要为每个对象的数据成员分的,因此要为每个对象的数据成员分配内存单元配内存单元v同一个类的不同对象的函数是一样的,同一个类的不同对象的函数是一样的,因此将同类的所有对象的函数放在一因此将同类的所有对象的函数放在一个公共的区域。个公共的区域。3.2.4 成员函数的存储方式成员函数的存储方式【例3-5】类的

10、对象占用内存空间实验。/=#include using namespace std;class Testpublic:void Show()coutchar in Test is:cendl;private:char c;int main()Test test;coutSize of Test is sizeof(test)endl;return 0;/=3.2.4 成员函数的存储方式成员函数的存储方式【例3-6】相同类的不同对象执行相同成员函数输出不同结果。/=#include using namespace std;class Testpublic:void Set(char ch)c=c

11、h;void Show()coutchar in Test is:c”运算符方便直运算符方便直观的进行,观的进行,“-”称为指向运算符。称为指向运算符。例如:Test test1;test1.Set(a);Test*pTest=&test1;test1.Show();pTest-Show();此处两个语句的执行结果完全此处两个语句的执行结果完全相同,只是采用了不同的访问相同,只是采用了不同的访问对象成员的形式而已对象成员的形式而已。3.3.3 通过引用访问成员通过引用访问成员v对象的引用和普通变量的引用在本质对象的引用和普通变量的引用在本质上是一样的上是一样的 v通过对象的引用访问对象成员和通

12、过通过对象的引用访问对象成员和通过对象访问成员形式上是一样的对象访问成员形式上是一样的例如:Test test1;test1.Set(a);Test&refTest=test1;test1.Show();refTest.Show();此处两个语句的执行结果完全此处两个语句的执行结果完全相同,只是采用了不同的访问相同,只是采用了不同的访问对象成员的形式而已对象成员的形式而已。3.4.1构造函数构造函数v构造函数的作用构造函数的作用 创建对象时对对象的数据成员初始化创建对象时对对象的数据成员初始化 v构造函数的特点构造函数的特点 构造函数与类名相同,且没有返回值构造函数与类名相同,且没有返回值 构

13、造函数不需要用户调用,由系统在创构造函数不需要用户调用,由系统在创建对象时自动调用的建对象时自动调用的 构造函数内容一般是初始化数据语句,构造函数内容一般是初始化数据语句,但也可以是其他的语句但也可以是其他的语句 创建对象时肯定会执行一个构造函数创建对象时肯定会执行一个构造函数3.4.1构造函数构造函数v带参数的构造函数带参数的构造函数 一般格式为:构造函数名一般格式为:构造函数名(参数表参数表);实参是在定义对象时给出的,一般格式实参是在定义对象时给出的,一般格式为:类名为:类名 对象名对象名(实参表实参表);v带参数的构造函数形式可以方便的实带参数的构造函数形式可以方便的实现对不同对象进行

14、不同的初始化现对不同对象进行不同的初始化 3.4.1构造函数构造函数【例3-10】定义两个长方体,分别求出它们的体积。这两个长方体的长宽高分别是4,2,3和5,1,2。#include using namespace std;class Boxpublic:Box(float L,float w,float h)/带有参数的构造函数 length=L;width=w;height=h;float Volume()return length*width*height;private:float length,width,height;int main()Box box1(4,2,3);/创建对象

15、时给出实参Box box2(5,1,2);coutVolume of box1 is box1.Volume()endl;coutVolume of box2 is box2.Volume()endl;return 0;3.4.1构造函数构造函数v构造函数与参数初始化表构造函数与参数初始化表 这种方法不在构造函数的函数体内对数这种方法不在构造函数的函数体内对数据成员初始化,而是在函数的首部实现据成员初始化,而是在函数的首部实现 例如:class Boxpublic:Box(float L,float w,float h):length(L),width(w),height(h)float Vo

16、lume()return length*width*height;private:float length,width,height;使用参数初始化表的构造函数3.4.1构造函数构造函数v 构造函数重载构造函数重载 在类中定义多个构造函数,这些构造函在类中定义多个构造函数,这些构造函数具有相同的函数名而参数表中参数的数具有相同的函数名而参数表中参数的个数或类型不同个数或类型不同 相当于给类实例化对象时提供了不同的相当于给类实例化对象时提供了不同的初始化方法初始化方法 3.4.1构造函数构造函数【例3-12】构造函数重载。/=#include using namespace std;class

17、Boxpublic:Box()/无参数的构造函数 length=1;width=1;height=1;Box(float L,float w,float h)/带有参数的构造函数 length=L;width=w;height=h;float Volume()return length*width*height;private:float length,width,height;/=int main()Box box1(4,2,3);/调用带有三个参数的构造函数创建对象Box box2;/调用没有参数的构造函数创建对象coutVolume of box1 is box1.Volume()end

18、l;coutVolume of box2 is box2.Volume()endl;return 0;3.4.1构造函数构造函数3.4.2 析构函数析构函数v析构函数的作用析构函数的作用 在系统释放对象之前进行清理工作。在系统释放对象之前进行清理工作。v析构函数的特点析构函数的特点 析构函数的函数名是固定的,由析构函数的函数名是固定的,由“”+“类名类名”组成组成 析构函数没有返回值析构函数没有返回值 析构函数没有参数析构函数没有参数 如果没有自己写出析构函数,系统会自如果没有自己写出析构函数,系统会自动生成一个析构函数动生成一个析构函数3.4.2 析构函数析构函数v析构函数的特点析构函数的特

19、点 析构函数在对象生命周期结束时由系统析构函数在对象生命周期结束时由系统自动调用自动调用3.4.2 析构函数析构函数【例3-13】带有析构函数的长方体类。/=class Boxpublic:Box()/无参数的构造函数 length=1;width=1;height=1;Box(float L,float w,float h)/带有参数的构造函数 length=L;width=w;height=h;float Volume()return length*width*height;Box()/析构函数 coutDestructor of Box is called!endl;private:fl

20、oat length,width,height;/=int main()Box box1(4,2,3);/调用带有3个参数的构造函数创建对象Box box2;/调用没有参数的构造函数创建对象coutVolume of box1 is box1.Volume()endl;coutVolume of box2 is box2.Volume()”调用对象的公用成员函数调用对象的公用成员函数 通过通过“*”运算符得到对象,然后再使用运算符得到对象,然后再使用“.”运算符调用对象的公用成员函数运算符调用对象的公用成员函数 3.6.2 指向对象成员的指针指向对象成员的指针v指向对象数据成员的指针指向对象数

21、据成员的指针 指向对象数据成员的指针和普通的指针指向对象数据成员的指针和普通的指针是完全相同的是完全相同的 v指向对象成员函数的指针指向对象成员函数的指针 指向对象成员函数的指针需要在指针名指向对象成员函数的指针需要在指针名前面加上所属的类名及域运算符前面加上所属的类名及域运算符“:”指向对象成员函数的指针不但要匹配将指向对象成员函数的指针不但要匹配将要指向函数的参数类型、个数和返回值要指向函数的参数类型、个数和返回值类型,还要匹配将要指向函数所属的类类型,还要匹配将要指向函数所属的类 3.6.2 指向对象成员的指针指向对象成员的指针【例3-17】使用指向对象成员函数的指针调用对象的成员函数/

22、=int main()Box box(2,2,2);/创建Box的对象boxfloat(Box:*p)();/定义指向Box类的成员函数的指针pp=&Box:Volume;/给指针p赋值,使其指向Box类的成员函数VolumecoutVolume of box is(box.*p)()height)*(this-width)*(this-length)vthis指针是指向本类对象的指针,它的指向指针是指向本类对象的指针,它的指向是被调用成员函数所在的对象是被调用成员函数所在的对象vthis指针是由系统通过参数隐式传递给成员指针是由系统通过参数隐式传递给成员函数的函数的this指针的处理过程指针

23、的处理过程源程序编译后调用时float Box:Volume()return length*width*height;float Box:Volume(Box*this)return this-length*this-width*this-height;box1.Volume(&box1);3.7 对象与对象与constv在程序设计的过程中需要考虑的一个非常在程序设计的过程中需要考虑的一个非常重要的因素就是数据的安全性重要的因素就是数据的安全性v在程序中,不同的模块之间经常出现需要在程序中,不同的模块之间经常出现需要共享数据的情况,此时数据的安全性降低共享数据的情况,此时数据的安全性降低v在程

24、序中既要让数据在一定范围内共享在程序中既要让数据在一定范围内共享,又又要保证数据的安全,这时可以使用要保证数据的安全,这时可以使用const,把对象或对象相关成员定义成常量把对象或对象相关成员定义成常量v本节主要从常对象、常对象成员、指向对本节主要从常对象、常对象成员、指向对象的常指针、指向常对象的指针和对象的象的常指针、指向常对象的指针和对象的常引用五个方面进行说明常引用五个方面进行说明3.7.1 常对象常对象v常对象中的所有成员的值都不能被修改常对象中的所有成员的值都不能被修改v常对象中数据成员为常变量且必须有初值常对象中数据成员为常变量且必须有初值v声明常对象的一般形式声明常对象的一般形

25、式 const 类名类名 对象名对象名(实参表实参表);类名类名 const 对象名对象名(实参表实参表);v如果一个对象被声明为常对象,则不能调如果一个对象被声明为常对象,则不能调用该对象的非用该对象的非const型的成员函数(构造函型的成员函数(构造函数和析构函数除外)数和析构函数除外)v在成员函数声明的后面加上在成员函数声明的后面加上const即可访问即可访问3.7.2 常对象成员常对象成员v常数据成员常数据成员 常数据成员的声明和作用与普通的常变量类似常数据成员的声明和作用与普通的常变量类似 在程序运行过程中常数据成员的值不能修改在程序运行过程中常数据成员的值不能修改 常变量在声明的同

26、时必须初始化常变量在声明的同时必须初始化 注意常数据成员在初始化时必须使用构造函数注意常数据成员在初始化时必须使用构造函数的参数初始化表的参数初始化表Box:Box(float L,float w,float h)length=L;width=w;height=h;不能使用这种形式进行初始化 Box:Box(float L,float w,float h):length(L)width=w;height=h;3.7.2 常对象成员常对象成员v常成员函数常成员函数 就是就是const型成员函数型成员函数 如果在常成员函数中出现了修改数据成员的语句,系如果在常成员函数中出现了修改数据成员的语句,系

27、统编译是通不过的统编译是通不过的 声明常成员函数的一般形式:声明常成员函数的一般形式:返回值类型返回值类型 成员函数名成员函数名(形参表形参表)const;)const;成员函数分类数据成员分类常成员函数非常成员函数常数据成员可以访问,但不可修改值可以访问,但不可修改值非常数据成员可以访问,但不可修改值可以访问,也可以修改值常对象的数据成员可以访问,但不可修改值不允许访问和修改值3.7.2 常对象成员常对象成员3.7.3指向对象的常指针指向对象的常指针v将指向对象的指针变量声明为将指向对象的指针变量声明为const型型v定义指向对象的常指针的一般形式:定义指向对象的常指针的一般形式:类名类名*

28、const 指针名指针名=&类的对象类的对象;v在给在给pbox赋初值后赋初值后pbox的值不能再修改的值不能再修改v一般情况下指向对象的一般情况下指向对象的const指针用作函数指针用作函数的形参的形参 指针在函数的执行过程中不会改变指针的指向指针在函数的执行过程中不会改变指针的指向 可以防止误操作,增加系统的安全性可以防止误操作,增加系统的安全性3.7.4指向常对象的指针变量指向常对象的指针变量v指向常对象的指针变量和指向常变量的指指向常对象的指针变量和指向常变量的指针变量的概念和用法非常接近针变量的概念和用法非常接近v定义指向常对象的指针变量的一般形式:定义指向常对象的指针变量的一般形式

29、:const 类名类名*指针变量名指针变量名;v说明:说明:如果一个对象已被声明为常对象,只能用指向如果一个对象已被声明为常对象,只能用指向常对象的指针变量指向它,而不能用一般的常对象的指针变量指向它,而不能用一般的(指指向非向非const型对象的型对象的)指针变量去指向它指针变量去指向它 如果定义了一个指向常对象的指针变量,并使如果定义了一个指向常对象的指针变量,并使它指向一个非它指向一个非const的对象,则其指向的对象的对象,则其指向的对象是不能通过指针来改变的是不能通过指针来改变的3.7.4指向常对象的指针变量指向常对象的指针变量v说明:说明:如果定义了一个指向常对象的指针变量,虽然如

30、果定义了一个指向常对象的指针变量,虽然不能通过它改变所指向的对象的值,但是指针不能通过它改变所指向的对象的值,但是指针变量本身的值是可以改变的变量本身的值是可以改变的 指向常对象的指针变量最常用于函数的形参,指向常对象的指针变量最常用于函数的形参,目的是在保护形参指针所指向的对象,使它在目的是在保护形参指针所指向的对象,使它在函数执行过程中不被修改函数执行过程中不被修改 当希望在调用函数时参数对象的值不被修改,当希望在调用函数时参数对象的值不被修改,就应当把形参定义为指向常对象的指针变量,就应当把形参定义为指向常对象的指针变量,同时用对象的地址作实参,而对象参数可以是同时用对象的地址作实参,而

31、对象参数可以是const或非或非const型。型。3.7.5 对象的常引用对象的常引用v对象的常引用表示一个对象的别名,但是对象的常引用表示一个对象的别名,但是无法通过引用来修改对象的数据成员无法通过引用来修改对象的数据成员v声明对象的常引用的一般形式:声明对象的常引用的一般形式:const 类名类名&引用名引用名=对象名对象名;v常引用的应用也是主要用在函数的形参中,常引用的应用也是主要用在函数的形参中,保证函数调用时实参对象的安全性保证函数调用时实参对象的安全性例如:Clock clock(12,12,12);const Clock&refclock=clock;refclock.Disp

32、lay();若Display函数是const成员函数,则合法;若Display函数是非const成员函数,则调用是非法的。3.8对象的动态创建和释放对象的动态创建和释放v使用使用new和和delete运算符实现对对象的动态运算符实现对对象的动态创建与释放创建与释放 v在程序执行到在程序执行到new语句时,系统会从内存语句时,系统会从内存堆中分配一块内存空间,存放类的对象,堆中分配一块内存空间,存放类的对象,调用构造函数初始化对象。如果内存分配调用构造函数初始化对象。如果内存分配成功,返回分配的内存的首地址;如果分成功,返回分配的内存的首地址;如果分配内存失败,则会返回一个配内存失败,则会返回一

33、个NULL。v但是通过但是通过new运算符动态创建的对象没有运算符动态创建的对象没有名字,要声明一个指针变量来保存对象的名字,要声明一个指针变量来保存对象的首地址首地址3.8对象的动态创建和释放对象的动态创建和释放v可以在使用可以在使用new运算符创建对象时给出实运算符创建对象时给出实参,调用带有参数的构造函数初始化对象参,调用带有参数的构造函数初始化对象 如:如:Box*pc=new Box(2,2,2);为了保险起见,在使用对象指针之前一般先判为了保险起见,在使用对象指针之前一般先判断指针的值是否为断指针的值是否为NULL v使用使用delete运算符释放该对象运算符释放该对象 vdele

34、te运算符的使用格式是:运算符的使用格式是:delete 指针名指针名;通过通过new运算符动态创建的对象只能通过运算符动态创建的对象只能通过delete运算符动态的释放运算符动态的释放 3.9对象的赋值和复制对象的赋值和复制v对象赋值的一般形式对象赋值的一般形式 对象名对象名1=对象名对象名2;对象赋值就是把对象对象赋值就是把对象2的数据成员的值复制给的数据成员的值复制给对象对象1对应的数据成员对应的数据成员 这个操作通过对赋值运算符的重载来实现这个操作通过对赋值运算符的重载来实现 默认的赋值运算符重载函数默认的赋值运算符重载函数 Box&Box:operator=(const Box&so

35、urce)length=source.length;width=source.width;height=source.height;3.9.1对象的赋值对象的赋值【例3-19】默认赋值运算符重载函数引起的指针悬挂问题。3.9.2对象的对象的复制复制v在创建对象时使用已有对象快速复制出完在创建对象时使用已有对象快速复制出完全相同的对象全相同的对象v对象复制的一般形式对象复制的一般形式 类名类名 对象对象2(对象对象1);类名类名 对象对象2=对象对象1;v复制构造函数只有一个形参,这个形参就复制构造函数只有一个形参,这个形参就是本类对象的引用是本类对象的引用v复制构造函数的代码主要是将形参中对象

36、复制构造函数的代码主要是将形参中对象引用的各数据成员值赋给自己的数据成员引用的各数据成员值赋给自己的数据成员3.9.2对象的对象的复制复制以Box类为例,看看复制构造函数的形式:Box:Box(const Box&c)/Box类的复制构造函数 length=c.length;width=c.width;height=c.height;普通构造函数和复制构造函数的区别:(1)在形式上普通构造函数一般是形参列表而复制构造函数的形参则只有一个(2)在调用时系统会根据实参类型来自动的选择调用普通构造函数还是复制构造函数。(3)调用的情况不同,普通构造函数是在创建对象时由系统自动调用;而复制构造函数是在

37、使用已有对象复制一个新对象时由系统自动调用,在以下3中情况下需要复制对象:程序中需要新创建一个对象,并用另一个同类的对象对它初始化 函数的参数是类的对象,函数的返回值是类的对象。3.9.2对象的对象的复制复制v在没有涉及指针类型的数据成员时,默认在没有涉及指针类型的数据成员时,默认复制构造函数能够很好地工作。复制构造函数能够很好地工作。v当一个类有指针类型的数据成员时,默认当一个类有指针类型的数据成员时,默认复制构造函数常会产生指针悬挂问题。复制构造函数常会产生指针悬挂问题。nameagep2nameagep1张三nameagep2nameagep1张三nameagep1悬挂nameagep1

38、3.9.3对象的赋值与复制的比对象的赋值与复制的比较较相同点主要有:(1)对象的赋值和复制大部分情况下都是把一个对象的数据成员依次赋给另外一个同类对象的相应数据成员。(2)如果不重载赋值运算符或不提供复制构造函数,系统都可以提供缺省的代码。(3)系统会根据情况自动的调用对象的赋值运算符重载函数或对象的复制构造函数。不同点主要有:(1)对象的赋值是在两个对象都已经创建的基础上进行的;而对象的复制则在用一个已有对象复制一个新对象时进行的。(2)它们两个所对应调用的函数不同,对象的赋值系统调用的是赋值运算符重载函数;而对象的复制系统调用的是复制构造函数。3.10向函数传递对象向函数传递对象v向函数传

39、递对象分为值传递、地址传递和引用传向函数传递对象分为值传递、地址传递和引用传递三种递三种 v在值传递中,系统会自动地调用复制构造函数按在值传递中,系统会自动地调用复制构造函数按照实参的照实参的“样子样子”以形参的名字为对象名创建局以形参的名字为对象名创建局部对象,在函数内部就使用这个与实参对象相同部对象,在函数内部就使用这个与实参对象相同的局部对象。的局部对象。v地址传递的方式是将实参的地址传递给形参,系地址传递的方式是将实参的地址传递给形参,系统并没有再创建和实参一样的局部对象统并没有再创建和实参一样的局部对象v引用传递的方式是将实参的名字传递给形参,使引用传递的方式是将实参的名字传递给形参

40、,使形参成为实参的别名,系统并没有再创建和实参形参成为实参的别名,系统并没有再创建和实参一样的局部对象,在函数中访问的对象就是实参一样的局部对象,在函数中访问的对象就是实参对象。对象。3.11学生信息管理系统学生信息管理系统实例实例v按照按照C+规定的声明类的格式对系统中的规定的声明类的格式对系统中的日期类进行声明。日期类进行声明。v日期类的声明代码放在名为日期类的声明代码放在名为date.h的头文的头文件中件中vDate类各成员函数的类外实现代码放在名类各成员函数的类外实现代码放在名为为date.cpp的源文件中的源文件中v可以在可以在main函数中创建函数中创建Date类的对象进行类的对象进行验证验证

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究生考试


经营许可证编号:宁ICP备18001539号-1