2012-11-01 49 views
-2

我有两个类像下面(I试图抽象例如作为我可以):执行重写的方法从基类

#include <iostream> 
using namespace std; 

class foo1 
{ 
public: 
    foo1() {}; 
    virtual ~foo1() {}; 
    void Method1()   { Method2(); } 
    virtual void Method2() { cout<<"parent";} 
}; 

class foo2 : public foo1 
{ 
public: 
    virtual void Method2() { cout<<"child";} 
}; 

int main() 
{ 
    foo2 a = foo2(); 
    a.Method1(); 
} 

我接收到的“父”的消息。 foo2Method1()执行foo1::Method2()

我需要使用什么来使foo2::Method1调用它们的foo2::Method2

+2

如何完全纯虚'Method2'? – Linuxios

+2

你确定吗?我期望上面的代码打印“孩子”。 – john

+5

在代码中修复语法错误之后,它按预期打印'child':[Demonstration](http://ideone.com/2bEHQM)。如果你的代码做了其他的事情,那么请发布一个完整的,可编译的例子来证明问题。 –

回答

9

不,你没有,你得到"child"。你会得到父母,如果你没有

foo1 a = foo2(); // My crystal ball tells me this is what you really have 

这将是由于对象切片。为了得到它的工作,你需要或者指针或引用:

foo2 f; 
foo1& rf = f; 
rf.Method1(); //child 

foo1* a = new foo2(); 
a->Method1(); //child 
+0

现在我发布了一个问题:“哪里得到水晶球,这样就可以在SO上获得巨大的回复”。 – UmNyobe

+3

@UmNyobe当你每个10k时你会得到一个:P –

+0

@UmNyobe:他在说谎。我在10K得到了一个水晶球,但它被破解,并没有做废话。 –