- 1、本文档共62页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10.类和对象剖析
第10章 类和对象 10.1 类和对象概述 10.2 构造函数和析构函数 10.3 对象的使用 10.4 综合应用实例 对象的赋值 拷贝构造函数 类中的成员对象的初始化 对象常量 对象的生存期 10.3.1 对象赋值和拷贝 默认拷贝构造函数 CData (const CData ) class CData { public: CData(int data=0) { m_nData=data; } ~CData() { } int getData() { return m_nData; } private: int m_nData; } CData a(3); CData b(a); //CData b=a; couta.getData()endl; coutb.getData()endl; 类名 对象名1(对象名2); 类名 对象名1=对象名2; 10.3.1 对象赋值和拷贝 class CName { public: CName() { strName=NULL; } CName(char *str) { strName=(char *)new char[strlen(str)+1]; strcpy(strName,str); } ~CName() { if (strName) delete []strName; strName=NULL; } char *getName() { return strName; } private: char *strName; }; CName o1(DING); CName o2(o1); //CName o2=o1; couto1.getName()endl; couto2.getName()endl; 解决CName对象初始化中的内容拷贝问题,在C++中有两种手段,一是给“=”运算符赋予新的操作,称为运算符重载(以后会讨论);二是重新定义或重载默认拷贝构造函数。 // error 10.3.2 浅拷贝和深拷贝 浅拷贝 内存空间内容的拷贝方式。 默认拷贝构造函数是浅拷贝方式。 深拷贝 对于数据成员有指针类型的类来说,必须自己定义一个拷贝构造函数,在数值拷贝之前,需要为指针类型的数据成员另辟一个独立的内存空间,称为深拷贝。 拷贝构造函数的格式 拷贝构造函数的参数可以是一个或多个,但左起的第1个参数必须是类的引用对象。 类名 (参数表) {} CName (CName x); CName (const CName x); CName (CName x, …); CName (const CName x, …); [例Ex_CopyCon] 使用拷贝构造函数示例 #include iostream #include cstring using namespace std; class CName { public: CName() { strName = NULL; } CName( char *str ) { strName = (char *)new char[strlen(str)+1]; strcpy( strName, str ); // 拷贝内容 } CName( CName one ) // A { // 为strName开辟独立的内存空间 strName = (char *)new char[strlen(one.strName)+1]; strcpy( strName, one.strName ); // 拷贝内容 } CName( CName one, char *add) // B { strName = (char *)new char[strlen(one.strName) + strlen(add) +1]; strcpy( strName, one.strName ); // 拷贝内容 strcat( strName, add); // 连接到strName中 } ~CName() { if (strName) delete []strName; strName = NULL; // 一个好习惯 } public: char *getName() { return strName; } private: char *st
文档评论(0)