區分一下強制類型轉換運算符重載/賦值運算符重載/對象定義的賦值

      這三個名字可能很繞,看着也很不同,但實際上是三個很容易混淆的概念,而且常常在實際編程中遇到。這裏拿出來比較一下。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

相關文章
相關標籤/搜索