C++學習大綱:常成員函數


C++學習大綱:常成員函數

C++ 常成員函數

常常把對象的成員函數分為兩類:修改對象狀態的成員函數、獲取對象狀態的成員函數。

常成員函數就是一種獲取對象狀態的成員函數,並且不能改變對象的狀態(也就是不能修改對象的成員的值)。

形式:

class A

{ ...

void f() const {...}

}

class A

{...

void f() const;//聲明

}

void A::f() const //定義

{

...

}

當時要注意下面兩個例子:

class A

{

int x;

char *p;

public:

...

void f() const

{

x=10; //Error

p = new char[20]; //Error

}

}

class A

{

int x;

char *p;

public:

...

void f() const

{

strcpy(p,"abc");//沒有改變p的值,因此編譯程序認為OK

*p = 'A';//同上

}

}

————————————————


C++學習大綱:常成員函數

【C++】 常對象、常數據成員、常成員函數總結

常數據成員

 ◆ 常數據成員必須進行初始化,並且不能被更新。

 ◆ 常數據成員不能在聲明時賦初始值(普通數據成員也是),常數據成員必須在構造函數初始化列表進行初始化;普通數據成員在初始化列表和函數體中初始化均可。

 ◆ PS:類的成員對象若要傳入參數初始化,則必須在構造函數初始化列表進行;(成員對象:當一個類的成員是另一個類的對象時,這個對象就叫成員對象。)

常對象

 ◆ ⭐常對象可以調用常成員函數,不能調用非const成員函數;非const對象,可以調用普通成員函數和常成員函數。

 ◆ 常對象的成員函數不一定都是常成員函數;同樣的常對象的數據成員不一定都是常數據成員。

 ◆ 常對象一旦初始化,常對象的數據成員便不允許修改,而不是說常對象的數據成員都是常數據成員。

 ◆ PS:定義常對象有兩種方法,1. Point const a; 2. const Point a;(同樣的,定義變量或指針時,const放前放後意義一樣,如:1. const double a; double const a; 2. const int *p; int const *p; 但是定義指針常量時,只能用 int * const p;)

常成員函數

 ◆ 常成員函數不更新對象的數據成員。

 ◆ 常成員函數的const關鍵字可以被用於參與對重載函數的區分。

 ◆ ⭐通常非const成員函數需要定義一個const版本的重載函數,以方便定義常對象後調用常成員函數。

  ◈ 如果常對象調用的常成員函數返回的是指向當前對象的指針(或返回的是當前對象),那麼此常成員函數的聲明的返回類型要加const,例如:

    ◊ 成員函數返回指向當前對象的指針

      const *Point fun1();    //非const成員函數的類內聲明;

      const *Point fun1() const; //習慣上要再聲明一個常成員函數作重載函數,注意到此函數聲明有兩個const;

    ◊ 成員函數返回指向當前對象

      const Point fun1();    //非const成員函數的類內聲明;

      const Point fun1() const; //習慣上要再聲明一個常成員函數作重載函數,注意到此函數聲明有兩個const;

    ◊ ⭐注意,如果一個類中聲明以下4個重載函數:

      ① Point fun1();

      ② const Point fun1();

      ③ Point fun1() const;

      ④ const Point fun1() const;

     【解析】①和②是衝突的,因為無法區分僅按返回類型區分的重載函數;③和④是衝突的,也是因為無法區分僅按返回類型區分的重載函數。

     所以正確的重載函數搭配有3種:

      ◊ ①和③搭配:

        Point fun1();             //函數返回非const對象

        Point fun1() const;          //函數返回非const對象

       [解析]適用於定義常對象後調用常成員函數,常成員函數返回類型是非const的Point類對象。

      ◊ ①和④搭配(這裡把返回類型改為指針,因為常用):

        Point *fun1() {return this; };      //函數返回指向本對象的指針

        const Point *fun1() const { return this; };//函數返回指向本常對象的指針,第一個const說明返回的是指向常對象的指針,第二個const說明此函數是常函數

       [解析]適用於定義常對象後調用常成員函數,常成員函數返回類型是常Point類對象(如return *this;)。

      ◊ ②和④搭配:

        const Point fun1();          //函數返回常對象

        const Point fun1() const;       //函數返回常對象

       [解析]適用於定義常對象後調用常成員函數,常成員函數返回類型是常Point類對象。

      ◊ ②和③搭配:

        const Point fun1();

        Point fun1() const;

       [解析]雖然搭配合法,但是似乎不存在這種搭配。

————————————————

C++學習大綱:常成員函數

通過分享實用的計算機編程語言乾貨,推動中國編程到2025年基本實現普及化,使編程變得全民皆知,最終實現中國編程之崛起,這裡是中國編程2025,感謝大家的支持。

原文鏈接:https://blog.csdn.net/haitaolang/article/details/70162903


分享到:


相關文章: