预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

为什么要引入构造函数和析构函数? 对象的初始化是指对象数据成员的初始化,在使用对象前,一定要初始化。由于数据成员一般为私有的(private),所以不能直接赋值。对对象初始化有以下两种方法: 类中提供一个普通成员函数来初始化,但是会造成使用上的不便(使用对象前必须显式调用该函数)和不安全(未调用初始化函数就使用对象)。 当定义对象时,编译程序自动调用构造函数。 析构函数的功能是当对象被撤消时,释放该对象占用的内存空间。析构函数的作用与构造函数正好相反,一般情况下,析构函数执行构造函数的逆操作。在对象消亡时,系统将自动调用析构函数,执行一些在对象撤消前必须执行的清理任务。 2.类的公有、私有和保护成员之间的区别是什么? ①私有成员private:私有成员是在类中被隐藏的部分,它往往是用来描述该类对象属性的一些数据成员,私有成员只能由本类的成员函数或某些特殊说明的函数(如第4章讲到的友员函数)访问,而类的外部根本就无法访问,实现了访问权限的有效控制,使数据得到有效的保护,有利于数据的隐藏,使内部数据不能被任意的访问和修改,也不会对该类以外的其余部分造成影响,使模块之间的相互作用被降低到最小。 private成员若处于类声明中的第一部分,可省略关键字private。 ②公有成员public:公有成员对外是完全开放的,公有成员一般是成员函数,它提供了外部程序与类的接口功能,用户通过公有成员访问该类对象中的数据。 ③保护成员protected:只能由该类的成员函数,友元,公有派生类成员函数访问的成员。保护成员与私有成员在一般情况下含义相同,它们的区别体现在类的继承中对产生的新类的影响不同,具体内容将在第5章中介绍。 缺省访问控制(未指定private、protected、public访问权限)时,系统认为是私有private成员。 3.什么是拷贝构造函数,它何时被调用? 拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同类对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象时系统自动调用它;其形参是本类对象的引用,它的特殊功能是将参数代表的对象逐域拷贝到新创建的对象中。 在以下四种情况下系统会自动调用拷贝构造函数: ①用类的一个对象去初始化另一个对象 catcat1; catcat2(cat1);//创建cat2时系统自动调用拷贝构造函数, //用cat1初始化cat2。 ②用类的一个对象去初始化另一个对象时的另外一种形式 Catcat2=cat1;//注意并非catcat1,cat2;cat2=cat1; ③对象作为函数参数传递时,调用拷贝构造函数。 f(cata){}//定义f函数,形参为cat类对象 catb;//定义对象b f(b);//进行f函数调用时,系统自动调用拷贝构造函数 ④如果函数的返回值是类的对象,函数调用返回时,调用拷贝构造函数。 4.设计一个计数器类,当建立该类的对象时其初始状态为0,考虑为计数器定义哪些成员? //counter.h #ifndefcounter_h #definecounter_h classcounter{ private: intcount; public: counter(); voidsetCount(inti); intgetCount(); voiddisplayCount(); voidincrementCount(); voiddecrementCount(); ~counter(){} }; #endif //counter.cpp #include"counter.h" #include<iostream.h> counter::counter(){ count=0; } voidcounter::displayCount(){ cout<<count<<endl; } intcounter::getCount(){ returncount; } voidcounter::setCount(inti){ count=i; } voidcounter::incrementCount(){ count++; } voidcounter::decrementCount(){ count--; } //MAIN.CPP #include"counter.h" #include<iostream.h> voidmain(){ counterc1; c1.displayCount(); c1.setCount(4); c1.displayCount(); for(inti=0;i<=10;i++){ c1.incrementCount(); c1.displayCount(