C中的类和对象.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C中的类和对象

曹迎春 yccao@nju.edu.cn //拷贝构造函数实现部分 Person::Person(Person p) { coutcope p.pname to new memory\n; pname=new char[strlen(p.pname)+1]; //同构造函数,分配空间 if(pname!=0) //判断是否分配成功 strcpy(pname,p.pname); //复制字符串 } //析构函数实现部分 Person::~Person() { cout~Person is called: pnameendl;//输出要析构的Person对象的值 pname[0]=\0; //将字符串赋空值 delete pname; //释放pname所在的内存空间 } void main() { Person p1(cs.nju.edu.cn);//用构造函数定义Person对象p1,为其字符串赋值 Person p2(p1); //用拷贝构造函数定义Person对象p2,其字符串与p1相同 } FAQ9 深拷贝与浅拷贝的区别是什么? 浅拷贝就是对默认拷贝构造函数所实现的数据成员逐一赋值,如果类中包含指针类型数据,将会产生错误。为了解决该问题,需要显式定义拷贝构造函数,使其不但可以复制数据成员,而且可以为对象分配内存空间,这就是深拷贝。 class A {…}; A a1; A a2=a1; //调用拷贝赋值函数 A a3(a1); //调用拷贝构造函数 class A { public: …//省略 int cint; char* cp; //指针变量cp }; A::A(const A a) { cint=a.cint; int len=strlen(a.cp); cp=new char[len]; memcopy(cp,a.cp,len); …//省略 } A A::operator=(A b) { if(a.cp!=NULL) delete a.cp; cint=a.cint; int len=strlen(a.cp); cp=new char[len]; memcopy(cp,a.cp,len); …//省略 } 深拷贝和浅拷贝的区别 当拷贝对象状态中包含其他对象的引用时,如果需要复制的是引用对象指向的内容,而不是引用(内存地址),则是深拷贝,否则是浅拷贝。 浅拷贝就是成员数据之间的赋值,当值拷贝时,两个对象就有共同的资源。而深拷贝是先将资源复制一份,使对象拥有不同的资源,但资源内容是相同的。 深拷贝在处理引用时,如果改变新对象内容将不会影响到原对象内容。 浅拷贝资源后释放资源时可能会产生资源归属不清楚的情况,从而导致程序运行出错。 FAQ10 如何理解析构函数? 析构函数,其作用与构造函数刚好相反,是用来清理内存中无用的资源。只有当一个对象的生命周期结束时才调用析构函数。 没有使用析构函数的程序的代码如下: class Baud { public: Baud(long speed); private: int m_aSpeed; char *m_pszSpeed; } Baud::Baud(int speed) { m_aSpeed=new char[10]; if(m_pSpeed!=NULL) sprint(m_pszSpeed, “%ld”,speed); } Institute of Computer Software Nanjing University C++中的类和对象 FAQ1 如何理解类和对象? 在面向对象程序设计中,类表示对现实世界中一类具有共同特征的事物的抽象。 类的定义是由两部分组成的,分别是声明部分和实现部分。声明部分用来声明该类的成员,包括数据成员及成员函数(数据成员即是属性,成员函数即是方法),实现部分是成员函数的具体实现。 class 类名 { public: 公有数据成员或成员函数声明; private: 私有数据成员或成员函数声明; protected: 受保护数据成员或成员函数声明; } #include “iostream.h” class Stu { private: char name[20]; int age; char sex[10]; public: void stuinfo() { cout”name:”nameendl; cout”age:”ageendl; cout”sex:”sexendl; } } #include “iostream.h” class Stu { private: char name

文档评论(0)

shenland + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档