- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C类的构造函数和复制构造函数
C++类的构造函数和复制构造函数
[日期:2011-03-11] 来源:LinuxLinux? 作者:pcliuguangtao 首先,我们先看一个小小的问题:#include iostream#include stringusing namespace std;
class C{public:? C(){????? coutccccendl;
????? ? }? C( C c){????? m = c.m;????? coutcopy constructorendl;? }? string m;};
int main() {? string x =ssss;? C c2=C();??
//报错:no matching function for call to C::C(C)?? return 0;? }
作者的问题有:1、C c2=C()? 为什么出错误?为什么构造函数要改成C(const C c)?
2 、为什么调用无参构造函数时不能写成:C? c();? ?
开始介绍关于类构造函数的知识点:1、?? 首先,类的构造函数是用来处理对像的初始化的,并且,构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来(显式)的调用它,而是在建立对象时自动执行。
那么怎样才叫显式的调用那?比如已经有一个Student类class Student{public:? Student(int num,int score? ):????? m_number( num ),m_score(score ){}? Studnet(? ){}???? //默认构造函数? void PrintInfo(? )????? {????????? coutm_score m_numberendl;????????? ????? }private:? int m_number;? int m_score;? };Student stud_one.Student(123,96);??? //显式调用构造函数,编译器不允许Student Stud_two(124,98);????? //正确的调用方式
Student stud_three;stud_three.Student(125,99) ;??? //也是错误的,构造函数是在建立对象时有系统自动执行的,而且只执行一次。
2、默认构造函数:???? 建立一个对象时不需要给出实参的构造函数,叫该类的默认构造函数,又名缺省构造函数。 比如:Student(){}???????????? // (如果我们没有自己定义一个默认构造函数,编译器默认添加该构造函数作为默认构造函数)、Student(int num=123,int score=60):m_number(num),m_score(score){}? //一个构造函数给出了所有数据成员的默认值
一个类只能有一个默认构造函数(也可以说成,可以不使用参数而调用的构造函数,一个类只能有一个),否则,系统就无法辨别出默认的时候应该调用那个来构造一个新的对象!
3、复制和赋值复制:一个新的对象用一个已存在的对象来初始化,如? Student temp(stud_one);? 或者 Student temp=stud_one;但要注意,使用复制的前提是你已经定义了该类的复制构造函数 Student::Student(const Student b )(其中的const只是说明,在复制构造函数中不允许修改b对象的值!)赋值:两个已存在的对象赋值,编译器已经给我们重载了“=”,所以我们不用自己再定义,比如 stud_one=stud_two;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~下面来分析开始给出的两个问题:1、C c2=C();这个语句没有调用复制构造函数,而只是调用了C类的构造函数,所以会输出“cccc”,而不是“copy constructor”;我们需要加上const,是 因为G++是遵循了C++标准(2003)中的规定:非const引用不能绑定于临时对象。加上一个const才能编译通过。2、C c()编译器理解为定义一个函数c(),他的返回值为一个C 类的像。
您可能关注的文档
- 2012届华南师大附中高三综合测试(完整版).doc
- 2012届实验专题练习.doc
- 2012届人教版中考物理复习方案第6课时《电流 电路》课件.ppt
- 2012届高三特长班数学总复习线性规划与基本不等式.doc
- 2012年-让我们回归保险本质2.2专题.ppt
- 2012年3月份全国计算机等级考试二级C语言笔试题题库.doc
- 2012年4月公寓文化月系列活动策划2.doc
- 2012市场内训师培训p.ppt
- 2012年10月金山1—9路最新公.doc.doc
- 2012年4月半导体照明工程师职业资格认证全国统一考试报考....doc
- 期末复习课件++专题7+阿基米德原理++2023-2024学年人教版八年级物理下册.pptx
- 4-1电磁振荡(教学课件)高中物理人教版选择性必修第二册.pptx
- 本包含页空白页.pdf
- 【会计实操经验】财务操纵的知识框架.pdf
- 英国b2c电商网站ocado市场前景及投资研究报告-培训课件外文版2024.6,拼多多,阿里巴巴,1688,temu,tiktok.pdf
- 印尼在线约会行业市场前景及投资研究报告-培训课件外文版2024.6,微信,tiktok.pdf
- 印尼物联网IOT行业市场前景及投资研究报告-培训课件外文版2024.5.pdf
- 印尼斋月消费情况分析报告-培训课件外文版2024.6.pdf
- 英国GDP分析报告-培训课件外文版2024.6.pdf
- 印尼铁路行业市场前景及投资研究报告-培训课件外文版2024.6,援建高铁.pdf
最近下载
- 2024年国开电大《政府公共关系》教学考形考任务单选题库(附答案).pdf VIP
- SY∕T 5244-2019 石油天然气钻采设备 钻井液循环管汇.pdf
- 2022-2023学年安徽省芜湖市无为市八年级(下)期末数学试卷(含解析).docx
- 在中考考务会上讲话.docx
- 江苏省扬州汶河小学2022年6月五年级下册数学期末试卷+答案.pdf
- 青岛市(2022年-2023年)中考生物试题(含答案).pdf VIP
- 2023年湖南省永州市中考道德与法治真题 .pdf
- 2022-2023学年广东省深圳市宝安区七年级(下)期末数学试卷(1).docx VIP
- 重症患者的早期康复课件.pptx
- 推波助澜还是恰如其分?新租赁准则对永辉超市财务报表和估值的影响 案例解析.pptx
文档评论(0)