這三個名字可能很繞,看着也很不同,但實際上是三個很容易混淆的概念,而且常常在實際編程中遇到。這裏拿出來比較一下。html
首先是強制類型轉換運算符的重載,做用是當前對象向其餘類型的轉換,常見的形式是編程
operator int();
Integer::operator int() { return x; }
調用方式相似於函數
Integer c(10);int a=c;
在函數調用的時候,類型轉換的重載也會被隱式調用,好比下面一種狀況spa
void print(int n) { cout<<n<<endl; }Integer i(10);print(i);
與之相對應的是賦值運算符重載,賦值運算符是從別的類型轉換成當前對象,常見的形式以下:code
Integer operator=(int n);
Integer Integer::operator=( int n ) { return Integer(n); }
調用方式相似於htm
Integer c;c=11;
最後是對象定義時的賦值,若是你定義了以下的一個構造函數對象
Integer(int _x):x(_x){}
那麼你能夠用這種方式定義一個對象blog
Integer c=11;
須要特別區別的是,定義時的賦值是會不會調用賦值運算符重載的。另外,若是須要限制隱式類型轉換,能夠使用explicit關鍵字,見參考文獻[1].ci
參考文獻get
C++筆記(1)explicit構造函數
http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html