2010-01-15 119 views
0
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(); 

它给我分段错误。我究竟做错了什么?它应该在我看来很好!从基类方法调用子类虚拟方法

回答

1

就我所见,你在类定义下面的代码中没有做任何多态。

b->doStuff()应该调用B类的方法。如果你想在里面拨打A-> doSomething你可以用A:: doSomething

+0

B没有doStuff成员 - 所以A :: doStuff将被调用。 – 2010-01-15 12:42:36

+0

他正在调用非多态'doStuff',其实现调用多态'doSomething'。 – ChrisW 2010-01-15 12:43:31

+0

我打电话给在'B'类中声明并从'A'类调用的'doStuff()'。 – kjagiello 2010-01-15 12:45:23

0

你不应该有:class Apublic A ...

+0

我的不好。但是这不是问题。 – kjagiello 2010-01-15 12:40:56

5

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