欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++淺析構(gòu)造函數(shù)的特性

 更新時間:2022年07月08日 08:55:39   作者:幻荼  
構(gòu)造函數(shù)主要作用在于創(chuàng)建對象時為對象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動調(diào)用,無須手動調(diào)用;析構(gòu)函數(shù)主要作用在于對象銷毀前系統(tǒng)自動調(diào)用,執(zhí)行一 些清理工作

構(gòu)造函數(shù)的概念

構(gòu)造函數(shù)是一個特殊的成員函數(shù),名字與類名相同,創(chuàng)建類類型對象時由編譯器自動調(diào)用,保證每個數(shù)據(jù)成員都有一個合適的初始值,并且在對象的生命周期內(nèi)只調(diào)用一次。

構(gòu)造函數(shù)的特性

(1)函數(shù)名與類名相同。

(2)無返回值。

(3)編譯器自動調(diào)用對應的構(gòu)造函數(shù)。

(4)構(gòu)造函數(shù)可以重載。

我們這里直接舉一個例子

#include<iostream>
using namespace std;
class Data
{
public:
	Data()
	{
		cout << "Date()" << this << endl;
	}
	void InitData(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void PrintfData()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Data d1,d2;
	d1.InitData(2022,5,21);
	d1.PrintfData();
	return 0;
}

于是得到的的結(jié)果為:

只能有一個構(gòu)造函數(shù)

無參的構(gòu)造函數(shù)和全缺省的構(gòu)造函數(shù)都稱為默認構(gòu)造函數(shù),并且默認構(gòu)造函數(shù)只能有一個。

下面舉一個錯誤案例:

#include<iostream>
using namespace std;
class Data
{
public:
	Data()
	{
		cout << "Date()" << this << endl;
	}
Data()
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void InitData(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void PrintfData()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Data d1
	return 0;
}

上面的代碼中,有兩個默認的構(gòu)造函數(shù),因為不帶參數(shù)的構(gòu)造函數(shù)和全缺省的構(gòu)造函數(shù)都被看為默認的構(gòu)造函數(shù),所以說,現(xiàn)在有兩個構(gòu)造函數(shù),編譯器不知道到底要去調(diào)用哪個構(gòu)造函數(shù),所以說,就會報錯,所以我們刪除一個就可以了。

關(guān)于編譯器生成的默認成員函數(shù),很多人會有疑惑:在我們不實現(xiàn)構(gòu)造函數(shù)的情況下,編譯器會生成默認的構(gòu)造函數(shù)。但是看起來默認構(gòu)造函數(shù)又沒什么用?對象調(diào)用了編譯器生成的默認構(gòu)造函數(shù),但是對象year/month/_day,依舊是隨機值。也就說在這里編譯器生成的默認構(gòu)造函數(shù)并沒有什么用?

解答:C++把類型分成內(nèi)置類型(基本類型)和自定義類型。內(nèi)置類型就是語法已經(jīng)定義好的類型:如int/char...,自定義類型就是我們使用class/struct/union自己定義的類型,看看下面的程序,就發(fā)發(fā)現(xiàn)編譯器生成默認的構(gòu)造函數(shù)會對自定類型成員_t調(diào)用的它的默認成員函數(shù)

class Time
{
public:
	Time()
	{
		cout << "Time()" << endl;
		_hour = 0;
		_minute = 0;
		_second = 0;
	}
private:
	int _hour;
	int _minute;
	int _second;
};
class Date
{
private:
	// 基本類型(內(nèi)置類型)
	int _year;
	int _month;
	int _day;
	// 自定義類型
	Time _t;
};
int main()
{
	Date d;
	return 0;
}

什么意思呢,就是編譯器會不管int,char這種基本類型,而會去管自定義類型

這是輸出的結(jié)果

到此這篇關(guān)于C++淺析構(gòu)造函數(shù)的特性的文章就介紹到這了,更多相關(guān)C++構(gòu)造函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析C++?atomic?和?memory?ordering

    淺析C++?atomic?和?memory?ordering

    這篇文章主要介紹了C++?atomic?和?memory?ordering的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 通過示例詳解C++智能指針

    通過示例詳解C++智能指針

    這篇文章主要為大家通過示例介紹了C++智能指針的使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • C語言超詳細講解文件的操作

    C語言超詳細講解文件的操作

    C語言文件操作的方法有很多,函數(shù)也有很多你知道哪些呢?下面是小編為大家?guī)淼腃語言文件操作的方法,歡迎閱讀
    2022-04-04
  • 基于C語言實現(xiàn)簡易的掃雷游戲

    基于C語言實現(xiàn)簡易的掃雷游戲

    這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡易的掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 基于C++字符串替換函數(shù)的使用詳解

    基于C++字符串替換函數(shù)的使用詳解

    本篇文章是對C++字符串替換函數(shù)的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++的智能指針你真的了解嗎

    C++的智能指針你真的了解嗎

    這篇文章主要為大家詳細介紹了C++的智能指針,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++中for auto的用法及說明

    C++中for auto的用法及說明

    這篇文章主要介紹了C++中for auto的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • VS2019中QT連接及使用的方法步驟

    VS2019中QT連接及使用的方法步驟

    這篇文章主要介紹了VS2019中QT連接及使用的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • C++中的結(jié)構(gòu)體vector排序問題

    C++中的結(jié)構(gòu)體vector排序問題

    這篇文章主要介紹了C++中的結(jié)構(gòu)體vector排序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • opencv實現(xiàn)矩形檢測

    opencv實現(xiàn)矩形檢測

    這篇文章主要為大家詳細介紹了opencv實現(xiàn)矩形檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論