1 / 23
文档名称:

拷贝构造函数例题.ppt

格式:ppt   大小:175KB   页数:23页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

拷贝构造函数例题.ppt

上传人:hhhhh 2021/9/30 文件大小:175 KB

下载得到文件列表

拷贝构造函数例题.ppt

相关文档

文档介绍

文档介绍:拷贝构造函数及应用
人员类
电话用户服务类
1
引 用
C++函数中参数的传递方式是传值。在函数域中为参数重新分配内存,而把实参的数值传递到新分配的内存中。它的优点是有效避免函数的副作用。
如果要求改变实参的值,怎么办呢?如果实参是一个复杂的对象,重新分配内存会引起程序执行效率大大下降,怎么办呢?在C++中有一种新的导出型数据类型—引用(reference)可以解决上面的难题。引用又称别名(alias)。
2
注意:
,不能引用数组(数组名本身为地址)。
(引用也是地址),所以当函数的参数为引用时,引用不能作实参。
3
拷贝构造函数
同一个类的对象在内存中有完全相同的结构,如果作为一个整体进行复制或称拷贝是完全可行的。这个拷贝过程只需要拷贝数据成员,而函数成员是共用的(只有一份拷贝)。在建立对象时可用同一类的另一个对象来初始化该对象,这时所用的构造函数称为拷贝构造函数(Copy Constructor)。
CGoods类,拷贝构造函数为:
CGoods (CGoods & cgd){
Strcpy (Name , );
Price= ;
Amount=;
Totalvalue=;
}
4
拷贝构造函数的参数——采用引用。如果把一个真实的类对象作为参数传递到拷贝构造函数,会引起无穷递归 。
系统会自动提供称为缺省的按成员语义支持的拷贝构造函数,每个类成员被依次拷贝,亦称为缺省的按成员初始化。按成员作拷贝是通过依次拷贝每个数据成员实现的,而不是对整个类对象按位拷贝。赋值运算符“=”称缺省的按成员拷贝赋值操作符,同类对象之间可以用“=”直接拷贝 。
通常按成员语义支持已经足够。但在某些情况下,它对类与对象的安全性和处理的正确性还不够,这时就要求类的设计者提供特殊的拷贝构造函数和拷贝赋值操作符的定义。
5
拷贝构造函数的另2个用途:
1. 当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。这时要在内存新建立一个局部对象,并把实参拷贝到新的对象中。
,函数执行完成返回调用者时使用。原因也是要存储在一个临时对象中,再返回调用者。
因为局部对象在离开建立它的函数时就消亡了,不可能在返回调用函数后继续生存,所以在处理这种情况时,编译系统会在调用函数的表达式中创建一个无名临时对象,该临时对象的生存周期只在函数调用处的表达式中。
6
【例1】设计一个人员类(Person)
设计一个学校在册人员类(Person)。数据成员包括:
身份证号(IdPerson),
姓名(Name),
性别(Sex),
生日(Birthday)
家庭住址(HomeAddress)。
成员函数包括人员信息的录入和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。
7
#include<>
#include<>
enum Tsex{mid,man,woman}; //枚举类型
class Person{
char IdPerson[19]; //身份证号,18位数字
char Name[20]; //姓名
Tsex Sex; //性别
int Birthday; //生日,格式1986年8月18日写作19860818
char HomeAddress[50]; //家庭地址
8
public:
Person();
Person(char *,char *, Tsex, int, char *);
Person(Person &);
~Person();
void PrintPersonInfo(); //打印信息
void inputPerson(); //输入信息
//其他接口函数
};
9
Person::Person(){ //缺省构造函数
cout<<"缺省构造Person"<<endl;
IdPerson[0]='\0';
Name[0]='\0';
Sex=mid;
Birthday=0;
HomeAddress[0]='\0';
}
10