欢迎来到天天文库
浏览记录
ID:49561854
大小:264.00 KB
页数:46页
时间:2020-02-07
《C++ 构造与析构函数.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第4讲构造函数与析构函数构造函数定义构造函数具有构造函数的类如何创建对象析构函数复制构造函数1构造函数constructor(对象的初始化)构造函数是每个类都具有的一种特殊函数,有以下三特点:构造函数的名字必须与类名相同;构造函数没有函数(返回)类型—不是void;在创建对象时,构造函数才被系统自动调用,不能被用户显式调用。Circle类增加构造函数classCircle{private:doubleradius;public:Circle(double);doublegetArea();doublegetRadius();voidse
2、tRadius(double);};Circle::Circle(doublenewRadius){radius=newRadius;}1-1构造函数Constructor(1)默认构造函数defaultconstructor若在类中没有显式地定义构造函数,则编译器会自动提供一个不带参数、函数体为空(即不做任何事情)的默认构造函数。<类名>::<默认构造函数名>(){}此时,在程序中创建一个对象时,编译器调用默认构造函数来初始化该对象。若程序中有自定义的构造函数,则编译器就不会再生成默认构造函数(因此不能再使用),此时必须使用自定义的构
3、造函数创建对象。(2)自定义构造函数若类中显式自定义了构造函数,此时系统将不再提供默认的无参构造函数。classCylinder{doubler,h;public:Cylinder(double,double);voidsetv(double,double);voidgetv(double&,double&);doublesurface();doublevolume();};Cylinder::Cylinder(doublerr,doublehh){r=rr;h=hh;}voidCylinder::setv(doublerr,doubl
4、ehh){r=rr;h=hh;}voidCylinder::getv(double&rr,double&hh){rr=r;hh=h;}doubleCylinder::surface(){return3.14*r*r*2+2*3.14*r*h;}doubleCylinder::volume(){return3.14*r*r*h;}Date::Date(inty=1900,intm=1,intd=1)//默认参数{year=y;month=m;day=d;}注:若有默认参数又有重载函数时,可能出现二义性。构造函数可以重载,可带默认的参数值,
5、可内联.Date::Date()//无参重载{year=1900;month=1;day=1;}Date::Date(inty,intm,intd){year=y;month=m;day=d;}构造函数的说明创建对象时系统1)为对象的数据成员分配存储空间,2)调用构造函数(可以是默认构造函数),执行构造函数体中的代码。由于构造函数在创建新对象时被系统自动调用,而且类的数据成员多为private,因此可在构造函数中进行数据成员的初始化,将构造函数的参数值赋给对象的数据成员,从而在创建对象时进行初始化。每个类都具有构造函数,没有定义构造函数
6、的类,系统自动提供默认构造函数(什么都不做,空函数)警告:一个常见的错误是在构造函数前放置一个void。1-2因为创建对象时系统要调用构造函数,则必须根据构造函数形式创建对象(创建对象时为构造函数提供实参)(1)使用不带参数的构造函数创建对象时,对象的创建形式为:类名对象名;或:类名对象名=类名();如:Circlecir1;或:Circlecir1=Circle();注意:Circlea();//错,声明了一个函数名为a,返回值为Circle类的对象。#includevoidmain(){Circlecir1;
7、cout<voidma
8、in(){Circlecir1;cout<
此文档下载收益归作者所有