使用const關鍵字進行函式過載

2021-08-17 13:57:57 字數 1790 閱讀 8711

通常地,不同的過載函式不能具有相同數目的引數和引數型別。函式的返回值型別,雖然屬於成員函式的

signature

的組成部分,但僅僅返回值型別不同,是不能構成函式過載的,因為這會造成

redefinition

的錯誤。

但有乙個例外,就是使用

const

關鍵字進行函式過載,是成員函式成為

const

函式。見下面的**:

// overloading based on const

#include

#include

using

namespace std;

class

aclass

string greeting()

// (1)

//const string greeting()// (2)

////string greeting() const// (3)

//const string greeting() const

// (4)

private

:const string greetingwords;

};int

main(void)

說明:a.

(1)和

(4)中的

greeting

的引數數目和型別都是完全一致的

(兩個函式都沒有引數

),按照通常的說法,這會出現編譯錯誤,但事實上,上面的程式可以正常執行。因此,

(1)和

(4)中的兩個

greeting

函式,並無

redefinition

的問題,這是因為

(4)中的

greeting

函式名稱後有乙個

const

關鍵字的緣故;

b.同樣道理,如果將這個

(4)定義的

greeting

注釋掉,使用

(3)中的

greeting

函式的定義,結果也是正確的,因為

(3)中的

greeting

函式名稱後也有乙個

const

關鍵字;

c.(3)

和(4)

不能同時出現,否則會出現

redefinition

的編譯錯誤。因為它們之間的不同僅是返回值型別不同,乙個是

string

,另乙個是

const string

,而僅僅是返回值型別的不同,編譯器是無法區分兩個過載函式的不同;

d.基於上面的道理,

(1)和

(2)也不能同時出現;

e.結論。如果兩個函式的引數數目和資料型別都是一樣的,只要將其中乙個改為

const

成員函式

(即,函式名稱和引數後又

const

關鍵字)

,則仍然可以構成有效的函式過載;

f.輸出。上面的**輸出:

hello, world! – from nonconst version.

hello, world! – from const – const version.

a_class

是乙個nonconst

物件,因此選擇了

(1)中的

greeting

定義;b_class

是乙個const

物件,因此選擇了

(4)中的

greeting

定義。

C C 函式後有const關鍵字進行限定

我們在宣告乙個函式時,在其後面新增const關鍵字進行限定,表明這個函式是 唯讀 的。也就是說,這個函式不會 不能 修改任何資料成員。宣告乙個const函式很簡單,只要在函式宣告和實現時都用const進行限定即可 如下示例 任何不會修改資料成員的函式都應該宣告為const型別。如果在編寫const成...

const關鍵字的使用

看到const 關鍵字,c 程式設計師首先想到的可能是const常量。這可不是良好的條件反射。如果只知道用const 定義常量,那麼相當於把火藥僅用於製作鞭炮。const 更大的魅力是它可以修飾函式的引數 返回值,甚至函式的定義體。const 是constant 的縮寫,恆定不變 的意思。被cons...

關鍵字const的使用總結

1.const是一種型別修飾符,用於說明永不改變的物件,const物件一旦定義就無法再改變,所以const物件必須初始化。2.頂層const與底層const區別 位於 左側為底層const,位於 右側為頂層const 頂層const意味著記憶體本身儲存的資料是常量,如int const a 3 即變...