const 関数を使用してポリモーフィズムを実現できますか? つまり、関数 a() と別の関数 a()const はポリモーフィックに動作しますか?
void func(int a){}
void func(int a)const {}
const 関数を使用してポリモーフィズムを実現できますか? つまり、関数 a() と別の関数 a()const はポリモーフィックに動作しますか?
void func(int a){}
void func(int a)const {}
答えは です。あなたはそれをオーバーロードすることができます!!
#include<iostream>
using namespace std;
class Test
{
protected:
int x;
public:
Test (int i):x(i) { }
void fun() const
{
cout << "fun() const called " << endl;
}
void fun()
{
cout << "fun() called " << endl;
}
};
int main()
{
Test t1 (10);
const Test t2 (20);
t1.fun();
t2.fun();
return 0;
}
出力: 上記のプログラムは正常にコンパイルおよび実行され、次の出力が生成されます。
fun() called
fun() const called
'void fun() const' と 'void fun()' の 2 つのメソッドは、一方が const であり、他方がそうでないことを除いて、同じシグネチャを持っています。また、出力を詳しく見てみると、「const void fun()」が const オブジェクトで呼び出され、「void fun()」が非 const オブジェクトで呼び出されていることがわかります。C++ では、const 型に基づいてメンバー メソッドをオーバーロードできます。const 型に基づくオーバーロードは、関数が参照またはポインターを返す場合に役立ちます。const 参照または const ポインターを返す 1 つの関数 const と、非 const 参照またはポインターを返す他の非 const 関数を作成できます。
はい、ポリモーフィックな動作を実現できます。
これらの関数を呼び出すことができるので、1 つ ( const 関数) を定数オブジェクトで、もう 1 つ (非定数関数) を非定数オブジェクトで呼び出します。両方の関数は同じ名前ですが、使用方法が異なります。ポリモーフィズムも同じ名前ですが異なる形式を指します。