- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编程高手之路--C入门—类的其他几点问题
编程高手之路-- C++入门—类的其他几点问题一、拷贝构造函数拷贝构造函数在下列情况下被调用:用已经存在的对象去初始化同一个类的另一个对象;在函数的参数中,以传值方式传递类对象的拷贝;类对象的值被用做函数的返回值。拷贝构造函数和前面说到的转换构造函数有些相似。转换构造函数是把一个类的对象转化为另一个类的对象;拷贝构造函数是用一个已经存在的对象的值实例化该类的一个新对象。不同对象间的初始化和赋值的区别:赋值操作是在两个已经存在的对象间进行的;而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是简单地复制类中的每个成员。#include iostream.h#include string.hclass Date{int mo, da, yr;char* month;public:Date(int m = 0, int d = 0, int y = 0);Date(const Date);~Date();void display() const;};Date::Date(int m, int d, int y){static char* mos[] ={January, February, March, April, May, June, July, August, September, October, November, December};mo = m; da = d; yr = y;if (m != 0){month = new char[strlen(mos[m-1])+1];strcpy(month, mos[m-1]);}elsemonth = 0;}Date::Date(const Date dt){mo = dt.mo;da = dt.da;yr = dt.yr;if (dt.month != 0){month = new char [strlen(dt.month)+1];strcpy(month, dt.month);}elsemonth = 0;}Date::~Date(){delete [] month;}void Date::display() const{if (month != 0)cout month da , yr std::endl;}int main(){Date birthday(6,24,1940);birthday.display();Date newday = birthday;newday.display();Date lastday(birthday);lastday.display();return 0;}本例中,用到了两次拷贝构造函数。一个是使用普通的C++初始化变量的语句:Date newday = birthday;另一个是使用构造函数的调用约定,即把初始化值作为函数的参数:Date lastday(birthday);二、类的引用在函数参数和返回值中,如果一定要使用传值方式,那么使用类对象的引用,是一个提高效率的方法。类的数据成员也可以是一个引用,但必须注意:第一,一个引用必须初始化。通常一个类对象并不会像结构那样用大括号来初始化,而是调用构造函数。因此在构造函数里必须初始化类当中的引用成员。第二,引用是一个别名。尽管类里面的引用在使用方式上看起来和类的一般数据成员没有什么区别,但是作用在其上的操作,实际上是对用来初始化它的那么对象进行的。#include iostream.hclass Date{int da, mo, yr;public:Date(int d,int m,int y){ da = d; mo = m; yr = y; }void Display() const{ cout da / mo / yr; }};class Time{int hr, min, sec;public:Time(int h, int m, int s){ hr = h; min = m; sec = s; }void Display() const{ cout hr : min : sec; }}; class DateTime{const Date dt;const Time tm;public:DateTime(const Date d, const T
您可能关注的文档
最近下载
- 计量器具检定校准服务投标方案(完整技术标).docx
- 弹弹堂架设你想一个游戏那么一定要对这个有认识这样才能为.pdf
- 《常温好氧水解制复合碳源》编制说明.pdf
- 2023执业药师继续教育从8个临床问题学习氯吡格雷说明书参考答案.docx
- 护士进修汇报多学科护理的协作与合作.pptx
- 哈希HACH-NPW-160H总磷-总氮水质在线分析仪 使用手册-操作说明书.pdf
- 小学英语新人教版PEP三年级上册Unit 1 Making friends Part A第1课时教学课件(2024秋).pptx
- 《铁路桥隧养护与维修》教学课件合集.pptx
- 人教版六年级上册数学第三单元《分数除法》全单元教学课件(新插图).pptx
- 趋势交易法(鹿希武)-可直接打印.doc
文档评论(0)