C ++将基类作为输入并访问派生类成员函数

时间:2014-03-18 23:26:05

标签: c++ class inheritance

假设我已经定义了2个类,一个基类和一个派生类。然后我编写一个以基类作为输入的函数。 当我使用该函数时,我将只传递派生类函数,并希望能够访问基类方法的重新定义版本。 因此,假设base和derived类都有一个方法foo()。我创建了一个派生类变量,并将其传递给只接受基类变量的函数。在该函数内部,我想访问foo(),因为它是在派生类中定义的,而不是在基类中定义的。 我尝试过保护,但是没有用。

2 个答案:

答案 0 :(得分:1)

创建函数virtual,如果指针指向派生类实例,它将访问基类指针上的派生类实现。

确保传递指针或引用(不按值传递对象)

答案 1 :(得分:1)

class BaseT
{
    public: virtual void f(string msg) { cout << msg << " from Base" << endl; }
};

class DerivedT: public BaseT
{
    public: void f(string msg) { cout << msg << " from Derived" << endl; }
};

// myFunc says hi from derived or from base
// depending on what b really points to

void myFunc (BaseT *b) { b->f("hi"); }  

int main(int argc, char* argv[])
{   
    DerivedT d;
    BaseT b;

    myFunc (&d);
    myFunc (&b);
    return 0;
}