区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值
? ? ? 這三個名字可能很繞,看著也很不一樣,但其實是三個很容易混淆的概念,并且經(jīng)常在實際編程中遇到。這里拿出來比較一下。
?
????? 首先是強(qiáng)制類型轉(zhuǎn)換運算符的重載,作用是當(dāng)前對象向其他類型的轉(zhuǎn)換,常見的形式是
operator int(); Integer::operator int() {return x; }????? 調(diào)用方式類似于
Integer c(10); int a=c;????? 在函數(shù)調(diào)用的時候,類型轉(zhuǎn)換的重載也會被隱式調(diào)用,比如下面一種情況
void print(int n) {cout<<n<<endl; } Integer i(10); print(i);????? 與之相對應(yīng)的是賦值運算符重載,賦值運算符是從別的類型轉(zhuǎn)換成當(dāng)前對象,常見的形式如下:
Integer operator=(int n); Integer Integer::operator=( int n ) {return Integer(n); }?????? 調(diào)用方式類似于
Integer c; c=11;?????? 最后是對象定義時的賦值,如果你定義了如下的一個構(gòu)造函數(shù)
Integer(int _x):x(_x){}????? 那么你可以用這種方式定義一個對象
Integer c=11;????? 需要特別區(qū)別的是,定義時的賦值是會不會調(diào)用賦值運算符重載的。另外,如果需要限制隱式類型轉(zhuǎn)換,可以使用explicit關(guān)鍵字,見參考文獻(xiàn)[1].
參考文獻(xiàn)
C++筆記(1)explicit構(gòu)造函數(shù)
http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html
轉(zhuǎn)載于:https://www.cnblogs.com/sdqxcxh/archive/2012/05/08/2490973.html
總結(jié)
以上是生活随笔為你收集整理的区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: URAL 1047 Simple Cal
- 下一篇: 类和模块