<轉>函數重載之const

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   strong   

函數重載之const  

2012-03-10 10:17:17|  分類: C/C++學習筆記|舉報|字型大小 訂閱

  

        我們知道,如果函數名相同,在相同的範圍內,其參數類型、參數個數,參數順序不同等能構成函數重載。有趣的是如果同時在類中,對於函數名相同的const函數和非const函數能夠構成重載,同時它們被調用的時機為:如果定義的對象是常對象,則調用的是const成員函數,如果定義的對象是非常對象,則調用重載的非const成員函數。例如:
#include <iostream>
using namespace std;
class A
{
public:
       A( int x )
       {
              m = x;
       }
       
       int func( void )
       {
            cout << "non-const" << endl;
            m = 1700; //本函數體沒有聲明為const,允許修改成員資料 
            return m;
       }
       
       //函數體限制為const, 
       int func( void )const
       {
             cout << "const" << endl;             
             return m;
       }
private:
        int m;
};

int main( void )
{
    A b( 2002 );
    b.func( ); //調用 非const版本的func() 
    
    const A c( 2002 );
    c.func( ); //調用 const版本的func() 

   system( "PAUSE" );
   return 0;

}

另外,應該把不修改相應實參的形參定義為const引用,否則將限制該函數的使用,下面代碼將產生編譯錯誤:
 string::size_type find_char(string &s, char c)
 {
  while(i!=s.size()&&s[i]!=c) ++i;
  return i;
 }
 int main()
 {
  find_char("Hello World", ‘o‘) //error
  return 0;
 }

        錯誤的原因:雖然字串字面值傳遞給函數可以產生局部對象,但是這裡形參被聲明為引用,必須引用一個已存在的對象,所以上述代碼才會導致編譯錯誤。
        僅當形參是引用或指標時,形參是否為const才有重載現象。
class Account 
{  }; 
void lookup(Account &)
{ }
void lookup(const Account &)
{ }       

void lookup3(Account *)
{ }
void lookup3( Account const*)
{ }
void lookup4(Account *) //錯誤,不能重載
{ }
void lookup4( Account *const)//錯誤,不能重載
{ } 

const Account a(0);
Account b;
lookup(a);  //call lookup(const Account &)
lookup(b);  //call lookup(Account &)

注意:不能基於指標本身是否為const來實現函數的重載。例如,
 f(int *);
 f(int *const);
 以上兩個函數無法構成重載。

<轉>函數重載之const

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.