當類存在一個參數的構造函數的時候也能夠將這個構造函數稱之爲轉換構造函數,容許將參數類型的值轉換成類類型,可是隻容許一步類型轉換,若是想要禁止這種轉換操做,能夠經過在構造函數前面添加 explicit 實現。注意,若是將構造函數聲明成了explicit的方式,那麼在實例化對象的初始化時只可以使用直接初始化,而不可以使用拷貝初始化。ios
1 #include <iostream> 2 #include <string> 3 4 5 class test 6 { 7 public: 8 test() = default; 9 test(std::string str) 10 { 11 strName = str; 12 } 13 14 std::string strName; 15 }; 16 17 int main() 18 { 19 test t; 20 std::string strName = "Name"; 21 t = strName; 22 23 // 這一行是沒法經過編譯的,由於只容許一步類型轉換 24 // 這一步操做須要先將字符串轉換爲string類型,而後再轉換爲類類型 25 // t = "Name"; 26 27 28 return 0; 29 }
一個可變數據類型永遠不會是const類型,若是在類型將成員聲明成了mutable類型的變量,例如 mutable int n; ,那麼即使是在const接口中也能夠對其進行修改。函數
友元是不具備傳遞性質的,假如B是A的友元,C是B的友元,那麼C不是A的友元,C不可以訪問A類中的成員。spa
若是一個類全部成員都是public的,沒有定義任何構造函數,沒有類內初始值,沒有基類,也沒有virtual方法,則稱這個類爲聚合類,聚合類在實例化對象的時候能夠採用初始化列表的方式進行初始化,值的順序與類中定義成員的順序是一致的,若是初始化列表中的值的數量少於成員的數量,則剩餘的成員採用值初始化的方式進行初始化,可是不能夠多於類內數據成員的數量。code