烟大14级程序设计基础出11-1_第1页
烟大14级程序设计基础出11-1_第2页
烟大14级程序设计基础出11-1_第3页
烟大14级程序设计基础出11-1_第4页
烟大14级程序设计基础出11-1_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章怎样使用类和对象11.1利用构造函数对类对象进行初始化11.2析构函数11.3调用构造函数和析构函数的顺序11.4对象数组11.5对象指针11.6共用数据的保护11.7对象的动态建立和释放11.8对象的赋值和复制11.9静态成员11.10友元11.11类模板复习:做一个你想要的箱子classBox{public:

intvolume(); set_box(); show_box();

private:

intheight; intwidth; intlength;};

若类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化。classTime{public:

//声明为公用成员

inthour;intminute;intsec;

};Timet1={14,56,30};

//定义对象并初始化11.1利用构造函数对类对象进行初始化对象的初始化当数据成员比较多时,该方法繁琐,效率低用构造函数实现数据成员的初始化classTime{

Time()

//定义构造成员函数,赋初值

{hour=0;minute=0;sec=0;}};当创建对象时,系统自动调用构造函数为对象分配空间;对数据成员赋初值;请求其他资源。构造函数表现形式:

与类名相同,可以有任意类型的参数,不能有返回类型Time类例11.1用构造函数为对象的数据成员赋初值classTime{public:Time()

{

hour=0;

minute=0;sec=0;}voidset_time();

voidshow_time();

private:

inthour;intminute;intsec;};voidTime∷set_time()//向数据成员赋值{cin>>hour;cin>>minute;cin>>sec;}//输出数据成员的值voidTime∷show_time(){cout<<hour<<":"<<minute<<":"<<sec<<endl;}intmain(){

Timet1;

//建立对象t1,同时调用构造函数

t1.set_time();

//重新给对象t1的数据赋值t1.show_time();

//显示新值

Timet2;

//建立对象t2,同时调用构造函数

t2.show_time();//没有重新赋值,显示的是默认值

return0;}102554↙

10:25:540:0:0关于构造函数使用的说明:构造函数没有返回值,因此也不需要在定义构造函数时声明类型。classTime{public:

intTime(){…}}

errorC2380:type(s)preceding'Time'(constructorwithreturntype,orillegalredefinitionofcurrentclass-name?)error:returntypespecificationforconstructorinvalid关于构造函数使用的说明:用户不能在程序中直接调用。

Timet1;

t1.Time();

//不能由用户调用errorC2274:'function-stylecast':illegalasrightsideof'.'operatorerror:invaliduseof'Time::Time'当没有用户定义的构造函数时,系统提供缺省版本的构造函数,函数体为空,不做任何事情。关于构造函数使用的说明:当用另一个对象初始化时,不调用构造函数。classTime{public:Time(){cout<<"constructor"<<endl;}

……};

intmain(){

Timet1;//调用构造函数t1.Time()Timet2=t1;//不调用构造函数t2.Time()}constructor1.无参默认构造函数:

每一个对象都得到同一组初值2.带参数的构造函数:

不同对象将不同的数据传递给构造函数带参数构造函数头形式:

构造函数名(类型1形参1,类型2形参2,…)定义对象时给出实参:

类名对象名(实参1,实参2,…);带参数的构造函数切记:实参是在定义对象时给出的例11.2计算两个长方柱体积,其长、宽、高为:两组数据:(1)12,20,25(2)10,14,20

classBox{public:Box(int,int,int);

//声明带参数的构造函数intvolume();

private:

intheight;intwidth;intlength;};Box∷Box(inth,intw,intlen)

//定义构造函数{

height=h;width=w;length=len;}

//有参,三个数据成员分别赋值intBox∷volume(){return(height*width*length);}intmain(){Boxbox1(12,25,30);

//建立对象box1,指定初值cout<<"Thevolumeofbox1is"<<box1.volume()<<endl;Boxbox2(15,30,21);

//建立对象box2,指定初值cout<<"Thevolumeofbox2is"<<box2.volume()<<endl;return0;}用参数初始化表对数据成员初始化Box∷Box(inth,intw,intlen):

height(h),width(w),length(len){}数据成员形参函数体为空等效形式Box∷Box(inth,intw,intlen){height=h;

width=w;

length=len;}classStudent{public:Student∷Student(intn,chars,charnam[]):num(n),sex(s){strcpy(name,nam);

}private:intnum;charsex;charname[20];};

局限性:当形参含有数组,不能在参数表中初始化。常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以要写在初始化列表里面没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。什么情况必须使用参数初始化列表成员是按照他们在类中出现的顺序进行初始化的,而不是按照他们在初始化列表出现的顺序初始化的成员变量的初始化顺序classfoo{inti;intj;foo(intx):i(x),j(i){}//正确,先初始化i,后初始化j};classfoo{inti;intj;foo(intx):j(x),i(j){}//错误,i值未定义};构造函数的重载构造函数具有相同的名字,而参数的个数或参数的类型不相同。classSample{public:intx,y;

Sample(){x=0;y=0;}

//无参构造Sample(inta,intb){x=a;y=b;}//执行重载voiddisp(){cout<<"x="<<x<<",y="<<y<<endl;}};默认构造函数例11.3给例11.2增加无参和有参构造函数classBox{public:

Box();

//无参的构造函数Box(inth,intw,intlen):height(h),width(w),length(len){}

……};Box∷Box()//类外定义{height=10;width=10;length=10;}intmain(){

Boxbox1;//无参

Boxbox2(15,30,25);

//指定3个实参return0;}说明:1.每个类只能有一个默认的构造函数classBox{public:

Box();

//无参的构造函数}2.注意区分对象定义和普通函数声明Boxbox1;//对象定义Boxbox1();//函数返回值为Box类型3.每个对象的建立执行且只能执行其中一个构造函数classBox{public:Box(inth=10,intw=10,intlen=10);//类内声明

……};Box∷Box(inth,intw,intlen)//类外定义{height=h;width=w;length=len;}使用默认参数的构造函数在声明构造函数时指定默认参数在定义函数时可以不指定默认参数intmain(){Boxbox1; //没有给实参cout<<"Thevolumeofbox1is"<<box1.volume()<<endl;Boxbox2(15); //只给定1个实参cout<<"Thevolumeofbox2is"<<box2.volume()<<endl;Boxbox3(15,30); //只给定2个实参cout<<"Thevolumeofbox3is"<<box3.volume()<<endl;Boxbox4(15,30,20); //给定3个实参cout<<"Thevolumeofbox4is"<<box4.volume()<<endl;}例11.4使用有默认参数的构造函数说明:

(1)应该在声明构造函数时指定默认值,而不能只在定义构造函数时指定默认值。(2)在一个类中定义了全部是默认参数的构造函数后,不能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论