2017-01-19 6 views
1

int& MyClass::get(int key)の代わりにこのメンバーint MyClass::get(int key) constを呼び出すことはできますか?言い換えれば、C++ソースコードのどこに値を使用できますが、参照は使用できませんか?C++でこのメンバ関数を呼び出す方法は?

#include <iostream> 
using namespace std; 

class MyClass { 
public: 
    MyClass(int input) : i(input) {}; 
    int i; 

    int get(int key) const { 
     std::cout << "int get(int key) const " << key << std::endl; 
     return i; 
    } 

    int& get(int key) { 
     std::cout << "int& get(int key) " << key << std::endl; 
     return i; 
    } 
}; 

void dummy(const int helpme) 
{ 
    std::cout << helpme << std::endl; 
} 

int main() { 
    // your code goes here 
    MyClass abc(6); 
    std::cout << abc.get(13) << std::endl; 
    int result = (int)abc.get(16); 
    dummy(abc.get(18)); 
    return 0; 
} 
+0

なぜあなたは旧式のキャストを '(int)abc.get(16)'に持っていますか? –

+3

C++ 17では、 'std :: as_const(abc).get(...)'を使うことができます。それ以外の場合は、 'abc'を' const MyClass& 'にバインドすることができます。私はこの種のデザインを推奨していませんが、 – KABoissonneault

答えて

3

最も簡単な解決策は、変数にconst &を使用することです。 2つの単純な方法は

const auto & abc_const = abc; 
std::cout << abc_const.get(13) << std::endl; 

または

std::cout << static_cast<const MyClass&>(abc).get(13) << std::endl; 

編集している:あなたはこの2行に基づいて、戻り値の型に基づいて、過負荷を選択しようとしていたように見えます:

int result = (int)abc.get(16); 
dummy(abc.get(18)); 

See this answerは、過負荷解決中に戻り値の型が決して使用されない方法を説明します。

+0

ありがとうございます。これはまさに私が探しているものです –

関連する問題