做网站找哪个,宁夏做网站公司,女做受视频网站,菏泽网站建设谁最出名1.类的默认成员函数
默认成员函数就是用户没有显示实现编译器会自动生成的成员函数称为默认成员函数。一个类#xff0c;我们在不写的情况下编译器会默认生成6个默认成员函数#xff0c;分别是构造函数#xff0c;析构函数#xff0c;拷贝构造函数#xff0c;拷贝赋值运算…1.类的默认成员函数
默认成员函数就是用户没有显示实现编译器会自动生成的成员函数称为默认成员函数。一个类我们在不写的情况下编译器会默认生成6个默认成员函数分别是构造函数析构函数拷贝构造函数拷贝赋值运算符重载和取地址运算符重载。
1.1构造函数
构造函数在C中是一中特殊的成员函数需要特别注意的是构造函数虽然名称叫构造但是它主要任务并不是开空间创建对象而是在创建对象时初始化对象。构造函数具有以下几个关键特点
1.构造函数的名称必须与类名完全相同包括大小写
2.无返回值包括void
3.构造函数可以重载
4.如果类中没有定义构造函数则C编译器会自动生成一个无参的默认构造函数一旦用户显式定义编译器将不再生成。
5.无参构造函数、全缺省构造函数、我们不写构造是编译器默认生成的构造函数都叫做默认构造函数。但是这三个函数有且只有一个存在不能同时存在。无参构造函数和全缺省构造函数虽然构成函数重载但是调用时会存在歧义。要注意默认构造函数不只是编译器默认生成的那个构造函数实际是上无参构造函全缺省构造函数也是默认构造函数。总而言之就是不传参就可以调用的勾走函数就叫默认构造函数。
6.我们不写编译器默认生成的构造对内置类型成员变量的初始化没有要求也就是说内置类型成员变量的初始化是不确定的看编译器。对于自定义类型的成员变量要求调用这个成员变量都默认构造函数初始化。如果这个成员变量没有默认构造函数那么就会报错我们要初始化这个成员变量需要用初始化列表才能解决初始化列表我们以后会讲解。
微提示C把类型分为内置类型和自定义类型。内置类型就是语言提供的原生数据类型如int/char/double等自定义类型就是我们使用class/struct等关键字字节定义的类型。
class date
{
public://无参构造函数date(){_year 1;_month 1;_day 1;}//带参构造函数date(int year, int month, int day){_year year;_month month;_day day;}void print(){cout _year / _month / _day endl;}
private:int _year;int _month;int _day;
};int main()
{date d1;d1.print();return 0;
} 微提示在上述代码中类date 定义了一个对象d1并自动调用了无参构造函数 class date
{
public://无参构造函数date(){_year 1;_month 1;_day 1;}//带参构造函数date(int year, int month, int day){_year year;_month month;_day day;}void print(){cout _year / _month / _day endl;}
private:int _year;int _month;int _day;
};int main()
{date d1();d1.print();return 0;
} 微提示当我们在使用无参构造函数时在定义对象时我们不可以在在对象后面加上括号 class Date
{
public://带参构造函数Date(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout _year / _month / _day endl;}
private:int _year;int _month;int _day;
};int main()
{Date d1;d1.Print();return 0;
} 解析在这个代码中我们使用的是带参数的构造函数但是在编译时编译器报错了 错误为 “Date”: 没有合适的默认构造函数可用 这说明了带参数的构造函数不是默认构造函数 class date
{
public://无参构造函数date(){_year 1;_month 1;_day 1;}//带参构造函数date(int year, int month, int day){_year year;_month month;_day day;}void print(){cout _year / _month / _day endl;}
private:int _year;int _month;int _day;
};int main()
{date d1;d1.print();date d2(2024, 7, 24);//调用带参构造函数d2.print();return 0;
} 微提示带参构造函数的调用值需要再定义对象的时候同时传参就行了 由于构造函数可以重载所以我们可以定义一个全缺省构造函数如下例
class date
{
public://无参构造函数date(){_year 1;_month 1;_day 1;}//带参构造函数date(int year, int month, int day){_year year;_month month;_day day;}//全缺省函数date(int year 1, int month 1, int day 1){_year year;_month month;_day day;}void print(){cout _year / _month / _day endl;}
private:int _year;int _month;int _day;
};int main()
{date d1;d1.print();date d2(2024, 7, 24);d2.print();date d3(2024);d3.print();return 0;
} 微提示由于无参构造函数和全缺省构造函数是重载函数所以两者不能同时出现否者会出现调用歧义编译器不种地调用哪一个构造函数。 class date
{
public://全缺省函数date(int year 1, int month 1, int day 1){_year year;_month month;_day day;}void print(){cout _year / _month / _day endl;}
private:int _year;int _month;int _day;
};int main()
{date d3(2024);d3.print();return 0;
} 微提示全缺省函数函数如果给了实参就使用实参否者使用默认参数。我们在定义时值给了实参2024所以打印的结果就是年是实参其他参数是默认参数 2.析构函数
析构函数和构造函数的功能相反析构函数不是完成堆对象本身的销毁C规定对象在销毁时会自动调用析构函数完成堆对象中资源的清理释放工作。
析构函数的特点 1.析构函数的名称由波浪号~后跟类名组成 2无参数无返回类型。 析构函数不接受任何类型也不能被重载没有任何任何类型甚至连void都不写 3.每个类都只有一个析构函数。如果尝试为类定义多个析构函数编译器会报错 4.若未显示定义编译器会自动生成默认的析构函数 5.跟构造函数类似我们不写编译器自动生成的析构函数对内置类型成员不做处理自定义类型成员会调用他的析构函数 6.我们显示写的析构函数对于自定义类型成员也会调用他的析构也就是说自定义类型成员无论什么情况下都会自动调用析构函数 7.如果类中没有申请资源是析构函数可以不写直接使用编译器生成的默认析构函数如果默认生成的析构就可以用也就不需要显示写析构但是由资源申请时一定要自己写析构否者会造成资源泄露。 class Date
{
public:int year;int month;int day;//构造函数Date(int y, int m, int d){y year;m month;d day;}//析构函数~Date(){//在这个例子中析构函数不执行任何操作//因为Date类不包含需要手动清理的资源}
}; 微提示在这个代码中我们没有动态的申请空间如使用malloc等来开辟空间所以我们可以不写析构函数 3.拷贝构造函数
如果一个构造函数的第一个参数是自身类型的引用而且任何额外的参数都有默认值则该构造函数也叫做拷贝构造函数也就是说拷贝构造是一个特殊的构造函数。
拷贝构造的特点
拷贝构造函数是构造函数的一个重载。拷贝构造函数的参数第一个参数是类类型对象的引用使用传值调用编译器直接报错因为语法逻辑上会引发无穷递归调用。C规定自定义类型对象进行拷贝行为必须调用拷贝构造所以这里自定义类型传值传参和传值返回都会调用拷贝构造完成。若为显式定义拷贝构造编译器会自动生成拷贝构造函数。自动生成的拷贝构造对内置类型成员变量会完成浅拷贝一个字节一个字节的拷贝对自定义类型成员变量会调用他的拷贝构造。传值返回会产生一个临时对象调用拷贝构造传值引用返回返回的是返回对象的别名引用没有产生拷贝。但是如果返回对象是一个当前函数局部域的局部对象函数结束就销毁了 文章转载自: http://www.morning.nlpbh.cn.gov.cn.nlpbh.cn http://www.morning.txfxy.cn.gov.cn.txfxy.cn http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn http://www.morning.zsfooo.com.gov.cn.zsfooo.com http://www.morning.fmznd.cn.gov.cn.fmznd.cn http://www.morning.lkthj.cn.gov.cn.lkthj.cn http://www.morning.sskns.cn.gov.cn.sskns.cn http://www.morning.gmwdl.cn.gov.cn.gmwdl.cn http://www.morning.fynkt.cn.gov.cn.fynkt.cn http://www.morning.xplng.cn.gov.cn.xplng.cn http://www.morning.mngh.cn.gov.cn.mngh.cn http://www.morning.bbtn.cn.gov.cn.bbtn.cn http://www.morning.bgbnc.cn.gov.cn.bgbnc.cn http://www.morning.psqs.cn.gov.cn.psqs.cn http://www.morning.tgmwy.cn.gov.cn.tgmwy.cn http://www.morning.jjxnp.cn.gov.cn.jjxnp.cn http://www.morning.nsfxt.cn.gov.cn.nsfxt.cn http://www.morning.hjbrd.cn.gov.cn.hjbrd.cn http://www.morning.c7507.cn.gov.cn.c7507.cn http://www.morning.nppml.cn.gov.cn.nppml.cn http://www.morning.cpnlq.cn.gov.cn.cpnlq.cn http://www.morning.hympq.cn.gov.cn.hympq.cn http://www.morning.flzqq.cn.gov.cn.flzqq.cn http://www.morning.lzrpy.cn.gov.cn.lzrpy.cn http://www.morning.ejknty.cn.gov.cn.ejknty.cn http://www.morning.fthqc.cn.gov.cn.fthqc.cn http://www.morning.wqjpl.cn.gov.cn.wqjpl.cn http://www.morning.sgrdp.cn.gov.cn.sgrdp.cn http://www.morning.mkczm.cn.gov.cn.mkczm.cn http://www.morning.rmjxp.cn.gov.cn.rmjxp.cn http://www.morning.rfldz.cn.gov.cn.rfldz.cn http://www.morning.gxcym.cn.gov.cn.gxcym.cn http://www.morning.ttnfc.cn.gov.cn.ttnfc.cn http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn http://www.morning.xzkgp.cn.gov.cn.xzkgp.cn http://www.morning.lhztj.cn.gov.cn.lhztj.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.rnwmp.cn.gov.cn.rnwmp.cn http://www.morning.wrcgy.cn.gov.cn.wrcgy.cn http://www.morning.zdbfl.cn.gov.cn.zdbfl.cn http://www.morning.rczrq.cn.gov.cn.rczrq.cn http://www.morning.sxfmg.cn.gov.cn.sxfmg.cn http://www.morning.wpydf.cn.gov.cn.wpydf.cn http://www.morning.fndmk.cn.gov.cn.fndmk.cn http://www.morning.rhkgz.cn.gov.cn.rhkgz.cn http://www.morning.hlxxl.cn.gov.cn.hlxxl.cn http://www.morning.zrpys.cn.gov.cn.zrpys.cn http://www.morning.dfbeer.com.gov.cn.dfbeer.com http://www.morning.rbylq.cn.gov.cn.rbylq.cn http://www.morning.dpppx.cn.gov.cn.dpppx.cn http://www.morning.yptwn.cn.gov.cn.yptwn.cn http://www.morning.5-73.com.gov.cn.5-73.com http://www.morning.pdgqf.cn.gov.cn.pdgqf.cn http://www.morning.trnl.cn.gov.cn.trnl.cn http://www.morning.cfpq.cn.gov.cn.cfpq.cn http://www.morning.ssrjt.cn.gov.cn.ssrjt.cn http://www.morning.ppzgr.cn.gov.cn.ppzgr.cn http://www.morning.rqmqr.cn.gov.cn.rqmqr.cn http://www.morning.rdqzl.cn.gov.cn.rdqzl.cn http://www.morning.ngpdk.cn.gov.cn.ngpdk.cn http://www.morning.nbsfb.cn.gov.cn.nbsfb.cn http://www.morning.sltfk.cn.gov.cn.sltfk.cn http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn http://www.morning.drnjn.cn.gov.cn.drnjn.cn http://www.morning.tckxl.cn.gov.cn.tckxl.cn http://www.morning.lltdf.cn.gov.cn.lltdf.cn http://www.morning.c7513.cn.gov.cn.c7513.cn http://www.morning.hpdpp.cn.gov.cn.hpdpp.cn http://www.morning.nkkpp.cn.gov.cn.nkkpp.cn http://www.morning.jrksk.cn.gov.cn.jrksk.cn http://www.morning.qjngk.cn.gov.cn.qjngk.cn http://www.morning.tntbs.cn.gov.cn.tntbs.cn http://www.morning.rnnwd.cn.gov.cn.rnnwd.cn http://www.morning.fpqsd.cn.gov.cn.fpqsd.cn http://www.morning.wbxr.cn.gov.cn.wbxr.cn http://www.morning.sqqhd.cn.gov.cn.sqqhd.cn http://www.morning.itvsee.com.gov.cn.itvsee.com http://www.morning.lfqnk.cn.gov.cn.lfqnk.cn http://www.morning.kzxlc.cn.gov.cn.kzxlc.cn http://www.morning.llcsd.cn.gov.cn.llcsd.cn