区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值
生活随笔
收集整理的這篇文章主要介紹了
区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? 這三個名字可能很繞,看著也很不一樣,但其實是三個很容易混淆的概念,并且經常在實際編程中遇到。這里拿出來比較一下。
?
????? 首先是強制類型轉換運算符的重載,作用是當前對象向其他類型的轉換,常見的形式是
operator int(); Integer::operator int() {return x; }????? 調用方式類似于
Integer c(10); int a=c;????? 在函數調用的時候,類型轉換的重載也會被隱式調用,比如下面一種情況
void print(int n) {cout<<n<<endl; } Integer i(10); print(i);????? 與之相對應的是賦值運算符重載,賦值運算符是從別的類型轉換成當前對象,常見的形式如下:
Integer operator=(int n); Integer Integer::operator=( int n ) {return Integer(n); }?????? 調用方式類似于
Integer c; c=11;?????? 最后是對象定義時的賦值,如果你定義了如下的一個構造函數
Integer(int _x):x(_x){}????? 那么你可以用這種方式定義一個對象
Integer c=11;????? 需要特別區別的是,定義時的賦值是會不會調用賦值運算符重載的。另外,如果需要限制隱式類型轉換,可以使用explicit關鍵字,見參考文獻[1].
參考文獻
C++筆記(1)explicit構造函數
http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html
轉載于:https://www.cnblogs.com/sdqxcxh/archive/2012/05/08/2490973.html
總結
以上是生活随笔為你收集整理的区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: URAL 1047 Simple Cal
- 下一篇: 卖二手车分期付款能够多出金额的车是事故车