关于类和对象的进一步讨论.ppt

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

第9章 关于类和对象的进一步讨论 9.1 构造函数 9.2 析构函数 9.3 调用构造函数和析构函数的顺序 9.4 对象数组 9.5 对象指针 9.6 对象的动态建立和释放 9.7 对象的赋值和复制 9.8 静态成员 9.9 友元 9.1 构造函数 9.1.1 对象的初始化 在建立一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值。如果一个数据成员未被赋值,则它的值是不可预知的,因为在系统为它分配内存时,保留了这些存储单元的原状,这就成为了这些数据成员的初始值。这种状况显然是与人们的要求不相符的,对象是一个实体,它反映了客观事物的属性(例如时钟的时、分、秒的值),是应该有确定的值的。 类的数据成员是不能在声明类时初始化的。 class Student { int sno=10; string name=wang; }; 编译错误: ISO C++ forbids initialization of member `sno ISO C++ forbids initialization of member `name 为什么? 如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化。如 class Time { public: //声明为公用成员 int hour; int minute; int sec; }; Time t1={14,56,30}; //将t1初始化为14:56:30 但是,如果数据成员是私有的,或者类中有private或protected的成员,就不能用这种方法初始化。 类的封装性就体现在一部分数据是不能让外界访问的。所以直接在非成员函数中访问类对象的私有或者保护数据是不允许的。 类对象的初始化的任务,自然就落到了类的成员函数身上,因为它们可以访问私有及保护数据成员。 我们将初始化构想成下面的形式: class Student { int sno; double score; public: void init( ) { sno=10; score=85; } ... //其他公有成员 }; void fun { Student s; s.init(); //类的初始化 ... } 将初始化的工作交由init()成员函数无可非议,但让系统多了一道处理初始化的解释与执行。 9.1.2 构造函数的作用 为了解决这个问题,C++提供了构造函数(constructor)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。它不具有任何类型,不返回任何值。构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。 #includeiostream using namespace std; class Student { int sno; double score; public: Student( ); void setStudent(int sn,double sc); int getSno( ); double getScore( ); }; Student::Student( ) { sno=0; score=0; } void Student::setStudent(int sn,double sc) { sno=sn; score=sc; } int Student::getSno( ) { return sno; } double Student::getScore( ) { return score; } int main( ) { Student a,b; a.setStudent(10,85); couta.getSno( ) a.getScore()endl; coutb.getSno( ) b.getScoreendl; return 0; } 构造函数没有返回类型,函数体中也不允许返回值,因为构造函数专门用于创建对象和为其初始化,它不能随意被调用。没有返回类型,正显得它与众不同。 注意: ①在创建类对象时,构造函数被自动调用。 ②构造函数没有返回类型,函数体中也不允许返回值。 ③构造函数不需用户调用,也不能被用户调用。 ④构造函数专门用于创建对象和为其初始化,一般不提倡在构造函数中加入与初始化无关的内容。 ⑤如果用户自己没有定义构造函数,则C+

文档评论(0)

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

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

1亿VIP精品文档

相关文档