0

派生クラスが基本クラスの関数をオーバーロードしているかどうかを理解しようとしています (基本クラスには int パラメーターがあり、der クラスには double パラメーターがあります)。誰かがこれで私を助けることができますか..コードの28行目に方法はありますか (dd.f(d1);) 、基本クラスの関数呼び出しを取得できます。

これがコードです。

using namespace std;

class base {

    public :

        virtual void f (int i);

};

class der : public base{

    public:

        void f ( double d);

};

void base::f(int i){

    cout << "Base::f \n";

}

void der::f(double d){

    cout <<"Der::f \n";

}

int main(){

    der dd;

    int i =99;

    double d1 = 3232.232;

    dd.f(i); // why this calls der class func???

    dd.f(d1);

    base *ptr = new der();

    ptr->f(i);

    dynamic_cast<der *>(ptr)->f(d1);

    return 0;
}
4

4 に答える 4

2

基底クラスと同じ名前の派生クラスで関数を宣言すると、基底クラスの関数は非表示になります。

解決

`use base::f`

#include <iostream>
using namespace std;

class base {     
public :
    virtual void f (int i); 
};

class der : public base{
public:
    using base::f;
    void f ( double d);
};

void base::f(int i){
    cout << "Base::f \n";
}

void der::f(double d){
    cout <<"Der::f \n";
}

int main(){
    der dd;
    int i =99;     
    dd.f(i); // Base::f

    return 0;
}

推論

class Base {
    virtual void store(long l){
        //both int and long could be processed
    }
}

派生クラスを作成します

class Derived {
    virtual void store(long l) {
        //store another way.
    }
}

and call it like 

Derived d;
d.store(1);

それから、誰かが「もっと早く int を格納できる!」と考えます。そして作成する

Base::store(int)

このような隠れ場所がないと失敗します

于 2013-07-09T19:26:26.807 に答える
0

私は C++ プログラマーではありませんが、言語が、渡されるパラメーターと名前によって呼び出される関数/メソッドを識別することはかなり確信しています。f(int) は f(double) とは異なります。ポリモーフィズムを検索する

于 2013-07-09T19:26:40.993 に答える
0

なぜこれがder class funcを呼び出すのですか???

コンパイラは、同じクラスで宣言されている関数の間でのみシグネチャによって関数を選択するためです。たとえば、次のようなものがあるとします。

class der : public base{

public:
    void f ( double d);
    void f (int i ){cout << "f(int)" <<endl;}
};

your を呼び出すdd.f(i);と、 output が表示されますf(int)

呼び出しパラメーターが一致していなくてもクラスには関数があるため、コンパイラーはクラスに移動する必要はなく、単にderあなたをに変換しますf()baseintdouble

クラスf()から明示的に呼び出すには、次のようにします。basedd.base::f(i);

于 2013-07-09T19:29:04.803 に答える