1

const 関数を使用してポリモーフィズムを実現できますか? つまり、関数 a() と別の関数 a()const はポリモーフィックに動作しますか?

void func(int a){}
void func(int a)const {}
4

4 に答える 4

6

答えは です。あなたはそれをオーバーロードすることができます!!

#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 関数を作成できます。

于 2013-07-11T19:04:19.730 に答える
0

はい、ポリモーフィックな動作を実現できます

これらの関数を呼び出すことができるので、1 つ ( const 関数) を定数オブジェクトで、もう 1 つ (非定数関数) を非定数オブジェクトで呼び出します。両方の関数は同じ名前ですが、使用方法が異なります。ポリモーフィズムも同じ名前ですが異なる形式を指します。

于 2013-07-11T19:47:08.947 に答える