您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++構造函數的特性是什么”,在日常操作中,相信很多人在C++構造函數的特性是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++構造函數的特性是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
構造函數是一個特殊的成員函數,名字與類名相同,創建類類型對象時由編譯器自動調用,保證每個數據成員都有一個合適的初始值,并且在對象的生命周期內只調用一次。
(1)函數名與類名相同。
(2)無返回值。
(3)編譯器自動調用對應的構造函數。
(4)構造函數可以重載。
我們這里直接舉一個例子
#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; }
于是得到的的結果為:
無參的構造函數和全缺省的構造函數都稱為默認構造函數,并且默認構造函數只能有一個。
下面舉一個錯誤案例:
#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; }
上面的代碼中,有兩個默認的構造函數,因為不帶參數的構造函數和全缺省的構造函數都被看為默認的構造函數,所以說,現在有兩個構造函數,編譯器不知道到底要去調用哪個構造函數,所以說,就會報錯,所以我們刪除一個就可以了。
關于編譯器生成的默認成員函數,很多人會有疑惑:在我們不實現構造函數的情況下,編譯器會生成默認的構造函數。但是看起來默認構造函數又沒什么用?對象調用了編譯器生成的默認構造函數,但是對象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; }
什么意思呢,就是編譯器會不管int,char這種基本類型,而會去管自定義類型
這是輸出的結果
到此,關于“C++構造函數的特性是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。