2012-07-22 35 views
1

我正在閱讀Essential C++。在4.3節中,作者給予 一個例子來解釋常量基於常量重載

class val_class { 
public: 
    val_class(const BigClass &v) 
     : _val(v) {} 

    const BigClass& val() const {return _val;} 
    BigClass& val() {return _val;} 
}; 

void example(const BigClass *pbc, BigClass &rbc) 
{ 
    pbc->val(); 
    rbc.val(); 
} 

的使用在上面的代碼段中,作者重載基於常量性功能VAL。 然後pbc->val()將調用const實例,rbc.val()將調用非const實例。

pbc是類型爲的常量指針BigClass。我們如何保證BigClass有一個成員函數valBigClass應該用示例函數中的val_class替換?

+0

等等......什麼是BigClass? – ForEveR 2012-07-22 04:09:49

+0

我認爲你的'Const'應該是'const'。 – Mysticial 2012-07-22 04:09:59

+2

根據給出的內容,很難說出發生了什麼事情。它是不完整的,因爲'val_class'不會繼承任何東西,並且沒有聲明名爲'_val'的字段。如果這本書沒有提供更多的內容,那麼這只是一個壞榜樣或一個錯字。如果您有'BigClass'的完整定義,請包括它。另外,大寫的C'Const'可能是'const',除非它在某個地方還有特殊的定義。 – 2012-07-22 04:11:32

回答

2

必須是這樣的:Your Full Example

這顯然是剛剛在書錯字。當你爲自己想通了,在example功能應如下

void example(const val_class *pbc, val_class &rbc) 
{ 
    pbc->val(); 
    rbc.val(); 
} 
0

必須更換,因爲BigClass不能來源於val_classval_class不能存儲referenceconst-referenceBigClass對象,因爲代碼將在這種情況下,沒有編譯,因此它只能存儲BigClass對象,因此不能從val_class派生BigClass,因爲無法存儲未聲明/未聲明類型的對象)。