C++浅析构造函数的特性
构造函数的概念构造函数是一个特殊的成员函数名字与类名相同创建类类型对象时由编译器自动调用保证每个数据成员都有一个合适的初始值并且在对象的生命周期内只调用一次。构造函数的特性1函数名与类名相同。2无返回值。3编译器自动调用对应的构造函数。4构造函数可以重载。我们这里直接举一个例子12345678910111213141516171819202122232425262728293031#includeiostreamusingnamespacestd;classData{public:Data(){cout Date()this endl;}voidInitData(intyear 1,intmonth 1,intday 1){_year year;_month month;_day day;}voidPrintfData(){cout _year / _month / _day endl;}private:int_year;int_month;int_day;};intmain(){Data d1,d2;d1.InitData(2022,5,21);d1.PrintfData();return0;}于是得到的的结果为只能有一个构造函数无参的构造函数和全缺省的构造函数都称为默认构造函数并且默认构造函数只能有一个。下面举一个错误案例1234567891011121314151617181920212223242526272829303132333435#includeiostreamusingnamespacestd;classData{public:Data(){cout Date()this endl;}Data(){_year year;_month month;_day day;}voidInitData(intyear 1,intmonth 1,intday 1){_year year;_month month;_day day;}voidPrintfData(){cout _year / _month / _day endl;}private:int_year;int_month;int_day;};intmain(){Data d1return0;}上面的代码中有两个默认的构造函数因为不带参数的构造函数和全缺省的构造函数都被看为默认的构造函数所以说现在有两个构造函数编译器不知道到底要去调用哪个构造函数所以说就会报错所以我们删除一个就可以了。关于编译器生成的默认成员函数很多人会有疑惑在我们不实现构造函数的情况下编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用对象调用了编译器生成的默认构造函数但是对象year/month/_day依旧是随机值。也就说在这里编译器生成的默认构造函数并没有什么用解答C把类型分成内置类型(基本类型)和自定义类型。内置类型就是语法已经定义好的类型如int/char...自定义类型就是我们使用class/struct/union自己定义的类型看看下面的程序就发发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数123456789101112131415161718192021222324252627282930classTime{public:Time(){cout Time() endl;_hour 0;_minute 0;_second 0;}private:int_hour;int_minute;int_second;};classDate{private:// 基本类型(内置类型)int_year;int_month;int_day;// 自定义类型Time _t;};intmain(){Date d;return0;}什么意思呢就是编译器会不管intchar这种基本类型而会去管自定义类型这是输出的结果到此这篇关于C浅析构造函数的特性的文章就介绍到这了