2014-09-11 79 views
-4
class parent 
{ 
    public: 
    virtual void print() 
    { 
     printf("STUFF"); 
    } 
}; 

class child : public parent 
{ 
    public: 
    virtual void print() 
    { 
     printf("other stuff"); 
    } 
}; 

int main() 
{ 
    parent par = new child; 
    par.print(); 
    } 

当我试过这个,它总是使用父功能,而不是子功能。我试图让它使用子功能。函数覆盖不工作在c + +

+1

因为par是一个父类型变量,您的孩子将立即转给父母。如果你想调用孩子的功能,使用基类的指针或引用,如:'parent&par = new child();' – Melkon 2014-09-11 12:20:12

+9

'parent par = new child;'这行不应该编译 – Geoffroy 2014-09-11 12:20:14

+0

如果你的真实代码就像'parent par = *(new child);'那么这是因为你正在复制对象的父对象,并丢弃(并泄漏)你从其复制的''''对象。如果它实际上是'parent * par = ...'和'parent-> print()',那么你应该看到孩子的覆盖。如果没有看到实际编译的代码,我们无法猜测它出了什么问题。 – 2014-09-11 12:23:39

回答

-1
class parent 
{ 
public: 
    virtual void print() 
    { 
     printf("STUFF"); 
    } 
}; 

class child : public parent 
{ 
public: 
    virtual void print() 
    { 
     printf("other stuff"); 
    } 
}; 

int main() 
{ 
    parent *par = new child; 
    par->print(); 
    delete par; 
    par = NULL; 
} 
+1

你刚刚教一个新手怎么做不做内存管理。恭喜。 – 2014-09-11 13:40:05