【问题标题】:Calling a subclassed virtual method from a base class method从基类方法调用子类虚方法
【发布时间】:2011-01-05 11:56:03
【问题描述】:
class A
{
public:
    virtual void
        doSomething(void)
    {}

    void
        doStuff(void)
    {
        doSomething();
    }
};

class B : public A
{
public:
    void
        doSomething(void)
    {
        // do some stuff here
    }
};

B * b = new B;
b->doStuff();

它给了我分段错误。我究竟做错了什么?在我看来它应该很好用!

【问题讨论】:

    标签: c++ methods polymorphism virtual


    【解决方案1】:

    在我纠正了语法错误并添加了一个 main() 函数后,它为我编译并执行,没有任何问题。尝试发布导致问题的真实代码,并重新考虑代码格式。

    【讨论】:

      【解决方案2】:

      据我所知,您没有在类定义下面的代码中执行任何多态性。

      b->doStuff() 应该调用B 类的方法。如果你想在 B 内部调用 A-> doSomething 你可以使用 A:: doSomething

      【讨论】:

      • B 没有 doStuff 成员 - 所以 A::doStuff 将被调用。
      • 他调用非多态doStuff,其实现调用多态doSomething
      • 我正在调用doStuff(),它在B 类中声明并从A 类中调用。
      • 对不起,我拼错名字了,我是想说doSomething
      • 现在我明白了什么是ChrisW ment。是的,我调用的是非多态doStuff,它的实现调用了多态doSomething,但它在我的代码中出现分段错误。
      【解决方案3】:

      你不应该在class Apublic A之后有:...

      【讨论】:

      • 我的错。但无论如何这都不是问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 2010-12-05
      • 2011-01-22
      相关资源
      最近更新 更多