C++转型构造函数
一句話總結:轉換型構造函數就是只有一個參數的構造函數,可以將一些其他類型的變量轉換成類對象。當要阻止這種隱形轉換時,需要在構造函數前面加關鍵字“explicit”;
轉型構造函數用于類型間的轉換,將其它數據類型轉變為類的對象類型。轉型構造函數只有一個參數,如果該參數是int型,則我們是將int型對象轉換為類對象,如果該參數類型為char *類型,我們則是將字符串常量轉換為類對象。
class Age { public:Age(int a){age = a;} private :int age; } class student { public:student(){}student(char * n){name = n;} private :char * name; }假設我們在程序設計過程中有一個以類對象作為函數參數的函數,函數聲明如下:(隱式轉換)
void fun(student s); //函數聲明 char * name = “Harry Potter”; fun(name);?
我們恰好在student類中定義了這樣一個轉型構造函數student(char * n);,該函數可以將字符串常量轉換為student類的對象。在我們運行fun(name);語句時,編譯器會自動調用轉型構造函數將name轉換為student類的對象,然后調用void fun(student s);函數。這一系列的過程都是編譯器自動完成的,我們稱此時的student類的轉型構造函數student(char * n);支持隱式類型轉換。之所以說是隱式的,是因為這個轉型過程完全由編譯器完成,無需程序設計人員顯示轉換類型。
我們希望直接強制關閉掉這種隱式類型轉換,在C++中,通過關鍵字explicit可以實現該功能。?
class student { public:student(){}explicit student(char * n){name = n;}//阻止隱式轉換 private :char * name; } char * name = “Harry Potter”; fun(name);//這個時候這邊就編譯不通過注意:
C++提供了關鍵字explicit,可以阻止不應該允許的經過轉換構造函數進行的隱式轉換的發生。聲明為explicit的構造函數不能在隱式轉換中使用。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: C++利用构造函数限制对象的创建
- 下一篇: C++常量指针this