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