欢迎来到天天文库
浏览记录
ID:38631713
大小:28.00 KB
页数:8页
时间:2019-06-16
《编程高手之路--C++入门—类的其他几点问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编程高手之路--C++入门—类的其他几点问题一、拷贝构造函数拷贝构造函数在下列情况下被调用:用已经存在的对象去初始化同一个类的另一个对象;在函数的参数中,以传值方式传递类对象的拷贝;类对象的值被用做函数的返回值。拷贝构造函数和前面说到的转换构造函数有些相似。转换构造函数是把一个类的对象转化为另一个类的对象;拷贝构造函数是用一个已经存在的对象的值实例化该类的一个新对象。不同对象间的初始化和赋值的区别:赋值操作是在两个已经存在的对象间进行的;而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情况,赋值的时候调用重
2、载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是简单地复制类中的每个成员。#includeiostream.h#includestring.hclassDate{intmo,da,yr;char*month;public:Date(intm=0,intd=0,inty=0);Date(constDate&);~Date();voiddisplay()const;};Date::Date(intm,intd,inty){staticchar*mos[]={January
3、,February,March,April,May,June,July,August,September,October,November,December};mo=m;da=d;yr=y;if(m!=0){month=newchar[strlen(mos[m-1])+1];strcpy(month,mos[m-1]);}elsemonth=0;}Date::Date(constDate&dt){mo=dt.mo;da=dt.da;yr=dt.yr;if(dt.month!=0){month=newchar[strlen(dt.month)+
4、1];strcpy(month,dt.month);}elsemonth=0;}Date::~Date(){delete[]month;}voidDate::display()const{if(month!=0)cout<5、;return0;}本例中,用到了两次拷贝构造函数。一个是使用普通的C++初始化变量的语句:Datenewday=birthday;另一个是使用构造函数的调用约定,即把初始化值作为函数的参数:Datelastday(birthday);二、类的引用在函数参数和返回值中,如果一定要使用传值方式,那么使用类对象的引用,是一个提高效率的方法。类的数据成员也可以是一个引用,但必须注意:第一,一个引用必须初始化。通常一个类对象并不会像结构那样用大括号来初始化,而是调用构造函数。因此在构造函数里必须初始化类当中的引用成员。第二,引用是一个别名。尽管类里面6、的引用在使用方式上看起来和类的一般数据成员没有什么区别,但是作用在其上的操作,实际上是对用来初始化它的那么对象进行的。#includeiostream.hclassDate{intda,mo,yr;public:Date(intd,intm,inty){da=d;mo=m;yr=y;}voidDisplay()const{cout<7、)const{cout<8、play();return0;}我们来看看这个程序中DateTime的构造函数的格式:冒号操作符引出了一个参数初始化表。必须使用这种格式来初始化引用数据成员,而不可
5、;return0;}本例中,用到了两次拷贝构造函数。一个是使用普通的C++初始化变量的语句:Datenewday=birthday;另一个是使用构造函数的调用约定,即把初始化值作为函数的参数:Datelastday(birthday);二、类的引用在函数参数和返回值中,如果一定要使用传值方式,那么使用类对象的引用,是一个提高效率的方法。类的数据成员也可以是一个引用,但必须注意:第一,一个引用必须初始化。通常一个类对象并不会像结构那样用大括号来初始化,而是调用构造函数。因此在构造函数里必须初始化类当中的引用成员。第二,引用是一个别名。尽管类里面
6、的引用在使用方式上看起来和类的一般数据成员没有什么区别,但是作用在其上的操作,实际上是对用来初始化它的那么对象进行的。#includeiostream.hclassDate{intda,mo,yr;public:Date(intd,intm,inty){da=d;mo=m;yr=y;}voidDisplay()const{cout<7、)const{cout<8、play();return0;}我们来看看这个程序中DateTime的构造函数的格式:冒号操作符引出了一个参数初始化表。必须使用这种格式来初始化引用数据成员,而不可
7、)const{cout<
8、play();return0;}我们来看看这个程序中DateTime的构造函数的格式:冒号操作符引出了一个参数初始化表。必须使用这种格式来初始化引用数据成员,而不可
此文档下载收益归作者所有