【问题标题】:Which method will this inherited class call (virtual function)? c++这个继承的类会调用哪个方法(虚函数)? C++
【发布时间】:2013-04-16 00:04:20
【问题描述】:

假设我有一个基类

class Base
{

public:
void A() {do stuff};
void B() {A(); do stuff};
};

还有一个派生类

class Derived : public Base
{
public:
void A() {do things}
};

Derived derived1;
derived1.B();

B会调用基类的A还是派生类的A?

我怀疑 B 会调用基类的 A,为了让它使用新的重新定义的 A,我必须把它变成虚拟的:

class Base
{

public:
virtual void A() {do stuff};
void B() {A(); do stuff};
};

正确吗?这就是虚函数的用途吗?

【问题讨论】:

  • 你不能测试一下吗?

标签: c++ inheritance virtual


【解决方案1】:

是的,在这两个方面都正确...

【讨论】:

    【解决方案2】:

    试试这个

    class Base
    {
    public:
    virtual void A() {do stuff};
    void B() { do stuff};
    };
    
    class Derived : public Base
    {
    public:
    void A() {do things}
    void B() {do things}
    };
    

    Derived d;
    Base *p = &d;
    p->A();
    p->B();
    

    函数 B 不会被覆盖

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 2013-04-23
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多