函数重写不在C++中工作

函数重写不在C++中工作,c++,oop,overloading,C++,Oop,Overloading,每当我尝试此操作时,它总是使用父函数而不是子函数。我试图让它使用子函数。因为PAR是父类型变量,您的孩子将立即被铸造成父级。如果您想调用子函数,则使用指针或引用到基类,例如:父和PAR =新的子;父母Par =新的孩子;如果你的真实代码是像父PAR=新的孩子一样,这条线就不能编译了。这是因为您正在复制对象的父部分,并丢弃和泄漏从中复制的子对象。如果它实际上是父母* PAR=…和parent->print,然后应该可以看到子对象的覆盖。在没有看到您实际编译的代码的情况下,我们无法猜测它有什么问题。

每当我尝试此操作时,它总是使用父函数而不是子函数。我试图让它使用子函数。

因为PAR是父类型变量,您的孩子将立即被铸造成父级。如果您想调用子函数,则使用指针或引用到基类,例如:父和PAR =新的子;父母Par =新的孩子;如果你的真实代码是像父PAR=新的孩子一样,这条线就不能编译了。这是因为您正在复制对象的父部分,并丢弃和泄漏从中复制的子对象。如果它实际上是父母* PAR=…和parent->print,然后应该可以看到子对象的覆盖。在没有看到您实际编译的代码的情况下,我们无法猜测它有什么问题。顺便说一下,这是重写,而不是重载。重载是指同一作用域中的两个函数具有相同的名称,但在某些方面有所不同。重写是指派生类重新定义父类的虚拟函数。代码不会编译。请给出问题中描述的错误代码。你刚刚教了一个新手如何不进行内存管理。祝贺你。@LightnessRacesBY-SA3.0你真的因为他使用了指针而生气了吗?@LightnessRacesBY-SA3.0使用指针有什么问题?@Andrew指针很好,在这种情况下,有必要。不过,在这里根本不需要动态分配。这个答案告诉我们这是真的。这是错误的。时期咨询你的C++书籍获取更多信息。@安得烈,我没有删除它;现在有很多国防部的审查制度
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();
  }
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;
}