2016-10-06 6 views
1

これはクラスでどのように可能ですか?関数のオーバーロードは戻り値の型を数えません。クラスのオーバーロードされたメソッド

DataViewModel* DataViewCtrlBase::GetModel() 
{ 
    return m_model; 
} 

const DataViewModel* DataViewCtrlBase::GetModel() const 
{ 
    return m_model; 
} 
+3

たぶん2の間に別の違いはありますか? – juanchopanza

+0

関数定義の後の 'const'はシグネチャの一部なので、別の関数です – EdChum

+0

標準ライブラリはこれらのオーバーロードでいっぱいです。 –

答えて

3

DataViewCtrlBase::GetModel() -qualified const非及びconst -qualified過負荷の両方を有します。非constオーバーロードは、現在のクラスインスタンスが非constコンテキストからアクセスされている場合にのみ呼び出されます。

あなたはこの(擬似コード)のように、オーバーロードされているものとして、これらの方法を考えることができます。

DataViewModel* GetModel(DataViewCtrlBase* this) { /* ... */ }    /* (0) */ 
const DataViewModel* GetModel(const DataViewCtrlBase* this) { /* ... */ } /* (1) */ 

例:

DataViewCtrlBase x; 

auto& x_non_const = x; 
x_non_const.GetModel(); // Calls (0) | Equivalent to: GetModel(x_non_const) 

const auto& x_const = x; 
x_const.GetModel();  // Calls (1) | Equivalent to: GetModel(x_const) 
関連する問題