dw网站制作,温州市住房和城乡建设局,申请一个微信号,做一个简单的网站构造函数 前言一、构造函数的概念二、构造函数特性 前言
类的6个默认成员函数#xff1a;如果一个类中什么成员都没有#xff0c;简称为空类。
空类中真的什么都没有吗#xff1f;并不是#xff0c;任何类在什么都不写时#xff0c;编译器会自动生成以下6个默认成员函数… 构造函数 前言一、构造函数的概念二、构造函数特性 前言
类的6个默认成员函数如果一个类中什么成员都没有简称为空类。
空类中真的什么都没有吗并不是任何类在什么都不写时编译器会自动生成以下6个默认成员函数。
默认成员函数用户没有显式实现编译器会生成的成员函数称为默认成员函数。
class Date {};一、构造函数的概念
C构造函数是一种特殊的成员函数用于创建和初始化类的对象。它在对象被创建时自动调用通常用于对对象的成员变量进行初始化操作。
对于以下Date类
class Date
{
public:void Init(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.Init(2022, 7, 5);d1.Print();Date d2;d2.Init(2022, 7, 6);d2.Print();return 0;
}对于Date类可以通过 Init 公有方法给对象设置日期但如果每次创建对象时都调用该方法设置信息未免有点麻烦那能否在对象创建时就将信息设置进去呢
构造函数是一个特殊的成员函数名字与类名相同,创建类类型对象时由编译器自动调用它会在内存中为对象分配空间并根据构造函数的定义进行对象的初始化。我们可以在构造函数中对成员变量进行赋值或执行其他初始化操作以确保对象在创建时具有合适的初始状态。
使用构造函数可以方便地创建对象并进行初始化操作提高代码的简洁性和可读性。在C中构造函数在对象创建时自动调用而析构函数则在对象被销毁时自动调用它们共同组成了C中的构造函数和析构函数机制用于管理对象的生命周期。即保证每个数据成员都有一个合适的初始值并且在对象整个生命周期内只调用一次。
二、构造函数特性
构造函数是特殊的成员函数需要注意的是构造函数虽然名称叫构造但是构造函数的主要任务并不是开空间创建对象而是初始化对象。
其特征如下
函数名与类名相同。无返回值包括void。对象实例化时编译器自动调用对应的构造函数。构造函数可以重载即可以有多个同名的构造函数但参数列表必须不同。
class Date
{
public:// 1.无参构造函数Date(){}// 2.带参构造函数Date(int year, int month, int day){_year year;_month month;_day day;}
private:int _year;int _month;int _day;
};void TestDate()
{Date d1; // 调用无参构造函数Date d2(2015, 1, 1); // 调用带参的构造函数// 注意如果通过无参构造函数创建对象时对象后面不用跟括号否则就成了函数声明// 以下代码的函数声明了d3函数该函数无参返回一个日期类型的对象// warning C4930: “Date d3(void)”: 未调用原型函数(是否是有意用变量定义的?)Date d3();
}如果类中没有显式定义构造函数则C编译器会自动生成一个无参的默认构造函数一旦用户显式定义编译器将不再生成。
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类中构造函数屏蔽后代码可以通过编译因为编译器生成了一个无参的默认构造函数// 将Date类中构造函数放开代码编译失败因为一旦显式定义任何构造函数编译器将不再生成// 无参构造函数放开后报错error C2512: “Date”: 没有合适的默认构造函数可用Date d1;return 0;
}关于编译器生成的默认成员函数很多读者会有疑惑不实现构造函数的情况下编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用 d对象调用了编译器生成的默认构造函数但是d对象_year/_month/_day依旧是随机值。也就说在这里编译器生成的默认构造函数并没有什么用 解答C把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的数据类型如int/char...自定义类型就是我们使用class/struct/union等自己定义的类型看看下面的程序就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数。
class Time
{
public:Time(){cout Time() endl;_hour 0;_minute 0;_second 0;}
private:int _hour;int _minute;int _second;
};
class Date
{
private:// 基本类型(内置类型)int _year;int _month;int _day;// 自定义类型Time _t;
};
int main()
{Date d;return 0;
}注意C11 中针对内置类型成员不初始化的缺陷又打了补丁即内置类型成员变量在类中声明时可以给默认值。
class Time
{
public:Time(){cout Time() endl;_hour 0;_minute 0;_second 0;}
private:int _hour;int _minute;int _second;
};
class Date
{
private:// 基本类型(内置类型)int _year 1970;int _month 1;int _day 1;// 自定义类型Time _t;
};
int main()
{Date d;return 0;
}无参的构造函数和全缺省的构造函数都称为默认构造函数并且默认构造函数只能有一个。 注意无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数都可以认为是默认构造函数。
class Date
{
public:Date(){_year 1900;_month 1;_day 1;}Date(int year 1900, int month 1, int day 1){_year year;_month month;_day day;}
private:int _year;int _month;int _day;
};
// 以下测试函数能通过编译吗
void Test()
{Date d1;
} 文章转载自: http://www.morning.ltkms.cn.gov.cn.ltkms.cn http://www.morning.txtzr.cn.gov.cn.txtzr.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.wyzby.cn.gov.cn.wyzby.cn http://www.morning.sprbs.cn.gov.cn.sprbs.cn http://www.morning.qmpbs.cn.gov.cn.qmpbs.cn http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com http://www.morning.kzpxc.cn.gov.cn.kzpxc.cn http://www.morning.rpljf.cn.gov.cn.rpljf.cn http://www.morning.hsflq.cn.gov.cn.hsflq.cn http://www.morning.qghjc.cn.gov.cn.qghjc.cn http://www.morning.tklqs.cn.gov.cn.tklqs.cn http://www.morning.srmpc.cn.gov.cn.srmpc.cn http://www.morning.kmqjx.cn.gov.cn.kmqjx.cn http://www.morning.sknbb.cn.gov.cn.sknbb.cn http://www.morning.ftync.cn.gov.cn.ftync.cn http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn http://www.morning.grzpc.cn.gov.cn.grzpc.cn http://www.morning.dskzr.cn.gov.cn.dskzr.cn http://www.morning.dglszn.com.gov.cn.dglszn.com http://www.morning.jpmcb.cn.gov.cn.jpmcb.cn http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn http://www.morning.xkyqq.cn.gov.cn.xkyqq.cn http://www.morning.pqsys.cn.gov.cn.pqsys.cn http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn http://www.morning.lkcqz.cn.gov.cn.lkcqz.cn http://www.morning.bdsyu.cn.gov.cn.bdsyu.cn http://www.morning.rxpp.cn.gov.cn.rxpp.cn http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn http://www.morning.fkgcd.cn.gov.cn.fkgcd.cn http://www.morning.sjli222.cn.gov.cn.sjli222.cn http://www.morning.txmkx.cn.gov.cn.txmkx.cn http://www.morning.fjglf.cn.gov.cn.fjglf.cn http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn http://www.morning.qjldz.cn.gov.cn.qjldz.cn http://www.morning.xltwg.cn.gov.cn.xltwg.cn http://www.morning.eshixi.com.gov.cn.eshixi.com http://www.morning.3dcb8231.cn.gov.cn.3dcb8231.cn http://www.morning.lqznq.cn.gov.cn.lqznq.cn http://www.morning.tpmnq.cn.gov.cn.tpmnq.cn http://www.morning.prxqd.cn.gov.cn.prxqd.cn http://www.morning.rlhjg.cn.gov.cn.rlhjg.cn http://www.morning.srwny.cn.gov.cn.srwny.cn http://www.morning.cjmmn.cn.gov.cn.cjmmn.cn http://www.morning.rmryl.cn.gov.cn.rmryl.cn http://www.morning.hilmwmu.cn.gov.cn.hilmwmu.cn http://www.morning.lctrz.cn.gov.cn.lctrz.cn http://www.morning.hfbtt.cn.gov.cn.hfbtt.cn http://www.morning.rwzc.cn.gov.cn.rwzc.cn http://www.morning.lffgs.cn.gov.cn.lffgs.cn http://www.morning.rdgb.cn.gov.cn.rdgb.cn http://www.morning.tjndb.cn.gov.cn.tjndb.cn http://www.morning.rszbj.cn.gov.cn.rszbj.cn http://www.morning.qkqpy.cn.gov.cn.qkqpy.cn http://www.morning.zrks.cn.gov.cn.zrks.cn http://www.morning.bssjp.cn.gov.cn.bssjp.cn http://www.morning.kyzxh.cn.gov.cn.kyzxh.cn http://www.morning.hqykb.cn.gov.cn.hqykb.cn http://www.morning.fmqng.cn.gov.cn.fmqng.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn http://www.morning.wnhml.cn.gov.cn.wnhml.cn http://www.morning.nbiotank.com.gov.cn.nbiotank.com http://www.morning.shuanga.com.cn.gov.cn.shuanga.com.cn http://www.morning.rflcy.cn.gov.cn.rflcy.cn http://www.morning.synlt.cn.gov.cn.synlt.cn http://www.morning.lywcd.cn.gov.cn.lywcd.cn http://www.morning.zlxrg.cn.gov.cn.zlxrg.cn http://www.morning.yhsrp.cn.gov.cn.yhsrp.cn http://www.morning.schwr.cn.gov.cn.schwr.cn http://www.morning.ktmnq.cn.gov.cn.ktmnq.cn http://www.morning.wjplm.cn.gov.cn.wjplm.cn http://www.morning.qnbsx.cn.gov.cn.qnbsx.cn http://www.morning.jtkfm.cn.gov.cn.jtkfm.cn http://www.morning.fkflc.cn.gov.cn.fkflc.cn http://www.morning.kxqfz.cn.gov.cn.kxqfz.cn http://www.morning.oumong.com.gov.cn.oumong.com http://www.morning.qdcpn.cn.gov.cn.qdcpn.cn http://www.morning.aishuxue.com.cn.gov.cn.aishuxue.com.cn