0

C++を使用して、私は持っています

struct Base {
    virtual void stuff(/*base stuff*/);
};

struct Derived : public Base {
    void stuff(/*derived stuff*/); 
};

void function1(Derived& obj){
   obj.stuff(); 
}

このシナリオでは、function1 は Derived の do() 関数を使用します。function1 で、代わりに Base クラスの do() 関数を呼び出したい場合はどうなりますか? function1 を として呼び出すと機能し function1(dynamic_cast<Base*>(derived_obj_ptr))ますか?

4

1 に答える 1

7

コード内の多数のエラーを修正した後、これは実際に達成可能です。

#include <iostream>

class Base {
public:
    virtual void foo() { std::cout << "Base\n"; }
};

class Derived : public Base {
public:
    void foo() { std::cout << "Derived\n"; }
};

void function1(Derived *p) {
   p->Base::foo();  // <<<<< Here is the magic >>>>>
}

int main() {
    Derived d;
    function1(&d);
}

出力:

Base

( http://ideone.com/FKFj8を参照)

于 2012-04-11T00:23:21.847 に答える