程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ const 成員函數,const成員函數

c++ const 成員函數,const成員函數

編輯:C++入門知識

c++ const 成員函數,const成員函數


第一個事實:

某類中可以這麼聲明定義兩個函數,可以重載(overload)

void pa(){
    cout<<"a"<<endl;
}
void pa() const{
    cout<<"b"<<endl;
}

上面的寫法是正確的。

基於這個事實,我思考了一下它的機制。

試驗得出,

第二個事實:

普通函數(不是類的成員函數),可以這樣來重載(overload):

void fun(const int &a)
{
    cout<<a<<endl;
}
void fun(int &a)
{
    cout<<a<<endl;
}

第二個事實說明了:如果函數參數是【引用類型】,那麼【const】 和 【不加const】 可以重載。

第三個事實:

普通函數(不是類的成員函數),也可以用指針這樣來重載(overload):

void test(const int* a){
    cout<<*a<<endl;
}
void test(int* a){
    cout<<*a<<endl;
}

第三個事實說明了,指針也可以在前面加 const 和 不加const 來重載。

分析第一個事實:

按照c++ primer裡面的說法,一個成員函數本身有一個隱式的參數: ClassName* const this//不要管這個const,跟本文主題無關.

但是還是先來解釋一下這個const,就是說,一個指針,本身不能再指向別人了,只能指向自己。

所以,你在類裡面不能更改this的值,

this = 0;//錯誤!

再來說這兩個類成員函數:

void pa();
void pa() const;

可以寫全,成為好理解的偽代碼,像這樣:

void pa(ClassName *const this);
void pa(const ClassName *const this);

第一個好理解,上面已經說過了。

第二個就是,c++提供給使用者的一個特殊語法,就是說成員函數加const,這個const實際上就是加給了隱式參數this的前面。

好了,總結:

這就是為什麼成員函數可以通過加const修飾符來重載。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved