函数覆盖不起作用

The function overriding is not working

本文关键字:不起作用 覆盖 函数      更新时间:2023-10-16

关于继承和函数覆盖的问题。

// base.h
class Base {
protected:
    void a();
public:
    void b();
}
// base.cc
void Base::a() {
    // Empty.
    return;
}
void Base::b() {
    this->a();
}
// derived.h
class Derived : public Base {
protected:
    void a();
}
// derived.cc
void Derived::a() {std::cout << "OK" << std::endl;}

所以在我的程序中,它是Derived* p = new Derived(),但p->b()不打印OK ?不好意思,我是新手。

必须声明一个函数virtual才能使继承工作。

// base.h
class Base {
protected:
    void a();
public:
    virtual void b();
}

您需要在基类声明中标记b() virtual:

class Base {
protected:
    void a();
public:
    virtual void b();
};

注意类声明末尾的分号:这在c++中是必需的。注意,您不需要在派生类中编写virtual,尽管有些人采用这种风格。

(与Java不同,多态在c++中不是自动的)。